ãLog4j 2ã«èå¼±æ§ããããããããã¼ã¸ã§ã³ã¢ãããããæ²»ãããããã
æ¬æ¥è©±é¡ã®ãã®ãã¼ãã§è»½ãæ¸ãã¦ããã¾ãã æªå®ã§ãã
æªå®å ¬éã®è¨ãè¨³ãæ´æ°ããå å®¹ã¯æå¾ã«æ¸ãã¦ã¾ãã大ããªééãã¯ï¼ä»ã®ã¨ãï¼ãªãã®ã§ãããã£ãã
2021-12-20追è¨: 2.17.0
åºã¦ã¾ãã®ã§ã³ãããã¦ãã®ã¾ã¾ã«ããé©å®èªã¿æ¿ãã¦ãã ãããã
ã¨ã«ãããã¼ã¸ã§ã³ãä¸ããã
â¦â¦ãªãªã¼ã¹ã§ãããã¯å¥ã®è©±ã¨ãã¦ã ãã¼ã¸ã§ã³ãä¸ããããªããã¨ã«ã¯è©±ã«ãªãã¾ãããã¨ãããã¨ã§ã¨ã«ããããã¾ãããã
Log4j 2ã®ãããªãã°ã©ã¤ãã©ãªã¯å¤ãã®ãããã¯ãã§ä½¿ç¨ããã¦ãã¾ãã æèããï¼ããªãã«é¢ãããããã°ã©ã¤ãã©ãªã¯ä½ãããé¢é£ãããã¨æãã¹ãã§ãããã
使ç¨ãã¦ãããã®èª¿ã¹æ¹
常æä¾åã©ã¤ãã©ãªãªã¹ããåºåãããªã©ãã¦ç®¡çãã¦ããã®ã§ããã°ãããè¦ãã°ããã ãã®è©±ã§ãããããã§ãªããã°ã mvn dependency:tree
ï¼ä½¿ã£ã¦ããã ããªã mvn dependency:list
ã®æ¹ãããããã ãã©ï¼ ã gradle dependencies
ãå©ã㦠log4j
ã¯ã¼ããè¦ãã®ãæ±ç¨çã§åãæ©ãã§ãããã
ãããã¯ãããããããããªããã·ã§ã«ã¹ã¯ãªããã¨ãã§ããã¨ããããã§ããã
åºã¦ããªãã£ããçµäºã§ãããã¾ãä½ãããåºã¦ããã¨æãã¾ãã
ä»åã®è©±ã 㨠log4j-core
ã対象ã£ã½ãï¼log4j-api
ã ããªãå½±é¿ãªããããï¼ã¨æã£ããã¯ãã¦ã¾ãã調ã¹ã¦ãªãã§ãï¼ã®ã§ãlog4j-core
ãç¡ããªããããªãã®ãããããããã¾ãããããLog4j 2ã¯ä¸é¨ä½¿ã£ã¦ãã¾ãããlog4j-to-slf4j
ã ããªãã§ä¸ããªãã¦ãããã§ããã¿ãããªèª¬æã¯ããã¯ããã§é¢åãªã®ã§ãä¸å¾ã使ã£ã¦ãã®ã§æ´æ°ãã¾ãããã¨ããã®ãããããªã£ã¦ã
ãpom.xml
ãbuild.gradle
ã«æ¸ãã¦ããªããã使ã£ã¦ããªããã¯èª¤ãã§ãã
ãã°ã©ã¤ãã©ãªã®æ§é
Javaã®ãããªãã®è¦æ¨¡ã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãæ´å²ççµç·¯ãããããã®ãããªæ§é ã«ãªã£ã¦ãã¾ãã
ãã®å³ã§ã¯ãã°APIã3種é¡ããã¾ãããå¿ è¦ãªã ãç¨æãã¦ããããä¸ã¤ã®ãã¬ã¼ï¼å®éã«ãã°ãæ¸ãåºããã®ï¼ã«æµãè¾¼ãæ§é ã§ãã ããã«ãããç°ãªããã°APIã使ç¨ãã¦ããã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ã§ãå ±åã§ããããã«ãªã£ã¦ãã¾ãã
è²ãå¡ã£ã¦ããã¨ãããä¾åã©ã¤ãã©ãªã§ãã èªåéã®ã³ã¼ãã使ç¨ãã¦ããã®ã¯ä¸çªå·¦ã ãã§ãããå ¨ã¦ãªããã°å®è¡æã¨ã©ã¼ã«ãªã£ã¦ãã¾ãã¾ãã
ä¸ååã®è²ãå¤ãã¦ããã®ã¯ããã°ã©ã¤ãã©ãªãç°å¢ï¼ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ï¼ã«æä¾ãããå ´åãããããã ä»åã®ã¢ãããã¼ã対象ã¯ããã¬ã¼ãã®ã¨ãããªã®ã§ãåé ã«æãããæããªãã¦ãããããããã©ã«ãã§ã¯ãã°APIã ãLog4j 2ã使ç¨ãã¦ããSpringBootãLog4j 2ã«å¤ãã¦ãªãã£ããå½±é¿ãªããã¨è¨ã£ã¦ããã®ã¯ãã®ããã§ãã
Spring Boot users are only affected by this vulnerability if they have switched the default logging system to Log4J2. The log4j-to-slf4j and log4j-api jars that we include in spring-boot-starter-logging cannot be exploited on their own. Only applications using log4j-core and including user input in log messages are vulnerable.
ãã®ã¢ãã¦ã³ã¹ãåºãã®ã§æ ã¦ã¦ä¸ããªãã¦ããã¨ããã¯å¤ããã
ä¸è¨ã®æ§é ã®ãããæ¬ã¨ã³ããªãªã©ã®ããã¼ã¸ã§ã³ã¢ãããã¯ãprovidedã®å ´åã«ã¯éç¨ãã¾ããã ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼å´ã§ã®å¯¾å¿ãå¿ è¦ã«ãªãã¨æãã¾ããï¼æè¿ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ä½¿ããªããã詳ããã¯ããããªããï¼
ã©ãã§ããããã©compile or provided
ãããªãruntime or provided
ã®ãé©åã ã¨æããã©ã大å¢ã«å½±é¿ãªãããç»åç´ãã®é¢åã ããç´ããªãã»ã»ã»ã
ãã°ã©ã¤ãã©ãªã®æ§é ã®ããå°ã詳ããæ å ±ã¯ä»¥ä¸ãåèã«ãªãã¨æãã¾ãã
- Javaã®ãã°åºå: éå ·ã¨èãæ¹: 宮巿ããã®ã¹ã©ã¤ã
- SLF4Jã®ã¦ã¼ã¶ã¼ããã¥ã¢ã«: ã®ç»åãããããã
- Log4j 2ã®FAQã®JARã®é¢ä¿: ä»åã¯ãã£ã¡ã®ç»åã®æ¹ããããã
ãã¼ã¸ã§ã³ã¢ããã®ããæ¹
Log4j 2ã¯è¤æ°ã®jarã§æ§æããã¾ãã
MavenCentralRepositoryã«ãããã®ã¯ https://search.maven.org/search?q=g:org.apache.logging.log4j ã§è¦ããããã®ããã°ãæ¸ãã¦ããç¾å¨ã57åããã¾ãã 2.15.0
ããªãªã¼ã¹ããã¦ãããã®ã§29åããã¡ãã¡è¦ã¦ãããã¾ããã
ããããè¤æ°jarã®ã©ã¤ãã©ãªã¯BOMã¨å¼ã°ãããã¼ã¸ã§ã³ç®¡çç¨ã®ä¸å¼ãæä¾ããã¦ããããã¾ããBOMã¯Bill of Materialsï¼é¨å表ï¼ã®ãã¨ã§ãMavenã§ãå ¬å¼ã«ä½¿ç¨ããã¦ããè¨èã§ãã
Log4j 2ã log4j-bom
ãããã®ã§ãããã使ãã¾ãã
Mavenã ã¨dependencyManagementã¿ã°ã§ãã
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-bom</artifactId> <version>2.15.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Gradleãªãplatform
ã§ãã
dependencies {
implementation platform('org.apache.logging.log4j:log4j-bom:2.15.0')
}
BOMã使ç¨ããã¨ãã¼ã¸ã§ã³ããã¡ãã§ç®¡çãããã®ã§ãlog4j-api
ãªã©ãç´æ¥dependencyã«è¿½å ããå ´åãªã©ããã¼ã¸ã§ã³ãè¨è¿°ãã¾ããã
ä»®ã«è¨è¿°ãã¦ãæ°ãããã¼ã¸ã§ã³ãåªå
ãããï¼Gradleã®ç«¶å解決ã«ä¾åããï¼ã®ã§æ³¨æãå¿
è¦ã§ãã
注æ: log4j-apiãªã©ã®åå¥ãã¼ã¸ã§ã³ãæå®ãã¦ã¯ãããªã
ãã¹ã¦ã®Log4j 2ã©ã¤ãã©ãªã®ãã¼ã¸ã§ã³ãæå®ããããã®éããæ ä¿ã§ããªãã®ã§ããã°ãåå¥ã«æå®ãã¦ã¯ããã¾ããã
ãã¨ãã°ä»¥ä¸ã®ããã«è¨è¿°ããå ´å
dependencies { implementation 'org.apache.logging.log4j:log4j-api:2.15.0' // ...ä»ã«ããã }
ãããªãã¨ã«ãªã£ãããã¾ãã
Log4j 2ã®ãã¼ã¸ã§ã³é£ãéããéè¯ãåä½ããã°ããã§ãããã¡ã½ããã·ã°ããã£ã®å¤æ´ãªã©ãããã¨å®è¡æã«ã¡ã½ãããè¦ã¤ãããªãä¾å¤ãåºãããã¾ããè¾ãã
SpringBootã§ã®ãã¼ã¸ã§ã³ã¢ãã
å ¬å¼ã¢ãã¦ã³ã¹è¦ãæ¹ããããããï¼æ¸ãã¦ããã¨åãã ãã©ï¼
SpringBootã使ãå ´åãæèãã¦ãããã¯ãã¦ãã spring-boot-dependencies
ã使ç¨ãã¦ããã¯ãã§ãã
spring-boot-dependencies
ã®ã½ã¼ã¹ã¯Gradleã ã£ãããããã§ãpomãã¡ã¤ã« ãè¦ãæ¹ãã¤ã¡ã¼ã¸ããããã§ãããã
Gradleã使ã£ã¦ã¦ãMavenã®ç¥èãå¿
è¦ã«ãªã£ã¦ããã®ã¯ããããã¨ããã»ã»ã»ã
ãã¼ã¸ã§ã³ã䏿¸ãããã¨ããSpringBootãã¼ã ãæ¤è¨¼ãã¦ãããã¦ãããã¼ã¸ã§ã³ã®çµã¿åããã¨éãçµã¿åãããã使ããã¨ã«ãªãã¾ãã ãã¡ãã䏿¸ãããªãã¦ãåããªãå¯è½æ§ã¯ãã£ã¦ãèªåéã®è²¬ä»»ç¯å²ã§ã¯ããã®ã§ãããããåããªã確çãé«ã¾ãã®ã¯äºå®ã§ãã SpringBootã«ä¹ã£ããã®ã§ããã°ããã®è¾ºãã®ãã¼ã¸ã§ã³ä¸æ¸ãã¯ããªãã«è¶ãããã¨ã¯ãªããã¨æã£ã¦ããããã¾ãã
2021-12-23ã«ãªãªã¼ã¹ãããSpringBoot 2.6.2
ã§Log4j 2ã®2.15.0
ã使ãããã«ãªã£ã¦ããããããªã®ã§ãããä»åã®å¯¾å¿ã§ä¸æ¸ããã¦ããSpringBootã®ãã¼ã¸ã§ã³ä¸ããæã¯å¿ããã«åé¤ããããã«ãã¾ãããã
ã§ãªãã¨Log4j 2ãå¤ããã¼ã¸ã§ã³ã«åãæ®ãããå¯è½æ§ãåºã¦ãã¾ãã
ãã¼ã¸ã§ã³ä¸æ¸ãã«é¢ããè¦åã¯SpringBootã®ãªãã¡ã¬ã³ã¹ã«ãæ¸ããã¦ãã¾ãã
Each Spring Boot release is designed and tested against a specific set of third-party dependencies. Overriding versions may cause compatibility issues and should be done with care.
SpringBoot x Maven
Mavenã®<properties>
ã¿ã°ã§ãã¼ã¸ã§ã³ãåæããã¦ãã¦ãããã§ä½¿ããã¼ã¸ã§ã³ã䏿¸ãã§ããããã«ãªã£ã¦ãã¾ããlog4j2.version
ã§ããã¹ãæ¤ç´¢ãã¦ããããã° log4j-bom
ã使ç¨ããã¦ããã®ãããããã¨æãã¾ãã
ï¼ãªãã§ log4j-to-slf4j
ãå
¥ã£ã¦ããã ãã»ã»ã»ä½ãã¨ãã¡ãã£ã¦ãã®ããªï¼ä»ã®BOMã«å
¥ã£ã¦ãã®ãããããã¬ãã«ã§æ¸ãã¦ãã®ã®ã»ããåªå
ãããããããï¼
ãªã®ã§SpringBootãMavenã§ä½¿ç¨ãã¦ããå ´åãªã©ã¯ãpropertyã䏿¸ãããã®ãæ£éã§ããpom.xml
ã«ä»¥ä¸ã®ããã«æ¸ãã
<properties> <log4j2.version>2.15.0</log4j2.version> </properties>
ãããã¯mvn
ã³ãã³ãã®ãã©ã¡ã¿ã§ãæå®ã§ãã¾ãããã¼ã¸ã§ã³ã¢ããã䏿çã«è©¦ãããã¨ããªããã©ã¡ã¿ã®ã楽ã¨è¨ãã°æ¥½ããã§ããã
SpringBoot x Gradle
SpringDependenctManagementãã©ã°ã¤ã³ã使ç¨ãã¦ãããè¦ããã« apply plugin: 'io.spring.dependency-management'
ã¨æ¸ãã¦ãããªããMavenã¨åãããããã£ã使ç¨ã§ãã¾ãã
ã¤ã¾ãã ext['log4j2.version'] = '2.15.0'
ãbuild.gradle
ã«æ¸ãã¦ãããã°OKãã¨æãã¾ãã
Springã®DependencyManagementPluginã使ç¨ãã¦ããªãå ´åã«ã¤ãã¦ã¯å¥ã«æ¸ãã¾ãããï¼2021-12-11T22:40ï¼
è±ç·: ãMavenãªãã¸ããªãã®æããã®
MavenCentralRepositoryã¯ä½ãè¨å®ããªããã°ããã©ã«ãã§ä½¿ç¨ããããªãã¸ããªã¨æã£ã¦ããã ããã°OKã§ãããªã«ã修飾ãããMavenãªãã¸ããªãã¨è¨ãã°ãMavenCentralRepositoryãæãã¾ãã
ãããã¤ã¬ã¯ãã«è¦ããªãã° https://repo1.maven.org/maven2/org/apache/logging/log4j/ ã§ãããã¡ãã«ãªããã°ããªãã¸ããªãæç¤ºçã«æå®ããããã¼ã«ã«ãªãã¸ããªã«èªèº«ã§ã¤ã³ã¹ãã¼ã«ããªãéãã mvn
ã³ãã³ãã§ä½¿ç¨ã§ãã¾ããã
ãªã https://mvnrepository.com/ ã¯MavenCentralRepositoryãå«ããMavenãªãã¸ããªã横æçã«æ¤ç´¢ãããå人ãéå¶ãã¦ããã¦ãããµã¼ãã¹ã§ãã
irof.hateblo.jp ããå°ãããããããã¾ããã
æ¤è¨¼ã¨ããªãªã¼ã¹ã¨ã
2.15.0
ã«æ´æ°ãããã¨ã§ããªãããã®äºææ§ã失ã£ã¦ããããããã¾ãããæè¿ã¯ãã¾ãè¸ã¿ã¾ãããã
ä»åã¯2.14.1
ãã 2.14.2
ã§ãªã2.15.0
ãªã®ã§ããããã大ããªå¤æ´ãäºæ³ããã¾ãã
äºææ§ã失ã£ã¦ããå ´åãç´æ¥ä½¿ç¨ãã¦ããé¨åã¯ã³ã³ãã¤ã«ã¨ã©ã¼ã«ãªãã¾ããã大æµã¯ããã§ã¯ãªãã使ç¨ãã¦ããã©ã¤ãã©ãªã使ç¨ãã¦ããã¡ã½ãããç¡ããªã£ã¦ããã·ã°ããã£ãå¤ãã£ã¦ããããªã©ã§ãã
ããããæã¯å®è¡æã« NoSuchMethodException
ã¨ããåºã¦ãã¾ããå°ãã
ã§ããã¡ãã¡èª¿ã¹ãã®ç¡çãªãã§ãèªåãã¹ãã§æ
ä¿ãã¾ãããã
åä½ã¬ãã«ã®æ¤è¨¼ã¯ã¦ããããã¹ãã§ããã¾ããããã°ã©ã¤ãã©ãªã¯ç°å¢ã«ããåºåã«å·®ããããã®ï¼ã¦ããããã¹ããªãã³ã³ã½ã¼ã«ã«ãã¬ã¼ã³ãªããã¹ãã§åºããã©ãéç¨ç°å¢ã ã¨JSONã§åºãããããã¡ã¤ã«ã«åºãããï¼ãªã®ã§ãã¦ããããã¹ãã ãã§ã¯æ ä¿ã§ãã¾ããã ãã°ãç£è¦ããä»çµã¿ãå«ããç°å¢ã«ä¹ã£ãã¦ã®ãã¹ããå¿ é ã«ãªã£ã¦ãã¾ãã
ã¾ããå½ç¶ã®ããã«æ§è½ã«ãå·®ãåºã¦ãã¾ãã ãã®è¾ºãã®ãã¹ããèªååãã¦ããã¨ããè² è·ãã¹ãã¶ãåããªãããªãªã¼ã¹ã«é¢ãã説æã¨ã調æ´ãè¡ãããã§ããããã¾ãã
ãã¨æ¬çªç°å¢ã¸ã®ãªãªã¼ã¹å¾ããã°ããã¯æ¤è¨¼ã¨ã¿ãªãã¾ãã Blue/Greenãããã¤ãªã©ã§åãæ»ããããã«ãã¦ããã°ãè² è·ãã¹ããåããªããï¼è´å½çãªåé¡ããã£ããæ»ãï¼ãã»ãã¥ãªãã£ãªã¹ã¯ã®é«ãç¶æ³ãæ©æã«è±ããããã«ãªãªã¼ã¹ããã¦ãã¾ãããªãã¦é¸æè¢ãåºã¦ãã¾ãã
ç³ãéãï¼2021-12-10T18:00ï¼
ã¡ãã£ã¨ç¨äºãããã®ã§ãæ¨æ²ããã¦ãã¾ãããå
¬éãã¦ããã¾ãããã¨ã§è¿½è¨ããããã¬ã©ãã¨æ¸ãæããããã
æ´æ°å±¥æ´
- 2021-12-11T19:30
- Log4J2 -> Log4j 2
- 2021-12-13T11:20
- ãã°ã©ã¤ãã©ãªã®æ§é ã®ã»ã¯ã·ã§ã³è¿½å
- BOMã®èª¬æè¿½å
- SpringBootã§ã®ãã¼ã¸ã§ã³ã¢ããã«é¢ããè¨è¿°ãMavenã®é ããå¼ãä¸ãããªãã¡ã¬ã³ã¹ã¸ã®ãªã³ã¯ã¨å¼ç¨è¿½å
- 2021-12-14T12:40
- Log4j 2ã®jaré¢é£ã示ãFAQã¸ã®ãªã³ã¯è¿½å
- Gradleã®ãæ¸ãããã¼ã¸ã§ã³ã使ããããããææ°ã使ããããã«ä¿®æ£