
log4shell(CVE-2021-44228) 취약점을 정화한 jee 웹 프로젝트
이것은 log4shell 취약점이 무해화된 간단한 웹 프로젝트입니다. 무해화되지 않은 버전은 https://github.com/scabench/l4j-tp1/을 참조하세요.
프로젝트는 일반 텍스트 문자열 hello world를 반환하는 간단한 scabench.HelloWorldService GET 서비스를 정의합니다.
이 서비스는 매개변수를 기대하지 않으며, 매개변수가 전달되면 오류가
기록됩니다.
취약한 의존성은 org.apache.logging.log4j:log4j-core:2.14.1이며, 취약점은 CVE-2021-44228입니다.
프로젝트는 log4shell이 등장했고 패치가 없을 때 Amazon이 만든 에이전트를 사용합니다.
에이전트는 취약한 클래스인 org.apache.logging.log4j.core.lookup.JndiLookup을 비활성화합니다.
에이전트 사용은 scabench.HelloWorldService가 로드될 때(클래스의 정적 블록에서) 에이전트를 동적으로 설치(즉, 어태치)함으로써 강제됩니다.
이 작업이 실패하면 애플리케이션이 중단됩니다. 이를 위해서는 JVM이 에이전트 셀프 어태치(self-attachment)를 활성화해야 합니다.
export MAVEN_OPTS="-Djdk.attach.allowAttachSelf=true"mvn jetty:runjava -jar dodgy-ldap-server.jar (취약한 코드는 이 서버에서 Java 코드를 다운로드합니다)http://localhost:8080/로 이동합니다. 이 사이트에는 악성 페이로드 ${jndi:ldap://127.0.0.1/exe}가 미리 채워진 양식이 있습니다.foo 파일이 생성되지 않습니다 (무해화되지 않은 버전에서는 생성되지만).애플리케이션을 실행하면 콘솔에 다음 줄이 나타납니다:
Transforming org/apache/logging/log4j/core/lookup/JndiLookup .
이 작업은 Unix 또는 macOS가 필요합니다. 이 프로젝트를 Windows로 포팅하는 것은 쉽습니다. 취약점을 입증하기 위한 단위 테스트가 제공되며, 설정은 https://github.com/scabench/l4j-tp1/에서 사용된 것과 동일합니다. 무해화로 인해 이 테스트는 이제 실패합니다.
여러 가지 분석을 실행하는 여러 sh 스크립트가 있으며, 결과 보고서는 scan-results에서 확인할 수 있습니다.
pom.xml에는 CycloneDX 형식의 SBOM을 생성하는 플러그인이 있습니다.
이를 위해 mvn cyclonedx:makePackageBom을 실행하면 SBOM을
target/에서 json 및 xml 형식으로 확인할 수 있습니다.