
이 저장소는 SECURITY-3430 / CVE-2024-43044의 악용을 방지하는 해결 방법을 제공합니다.
이것은 SECURITY-3430 수정 사항이 적용되지 않은 Jenkins 컨트롤러(즉, 2.470 및 LTS 2.452.3까지 포함)용 Java 에이전트입니다.
SECURITY-3430 취약점이 포함된 클래스의 정의를 변환하여 악용을 방지합니다. 어떤 이유로 실패하면 Jenkins가 강제로 중지됩니다.
이 우회 방법은 ClassLoaderProxy#fetchJar를 완전히 차단하므로 일반 수정 사항과 달리 보안 권고에 언급된 플러그인의 영향을 받는 기능과 호환되지 않습니다.
이 우회 방법은 최근 몇 년간의 여러 Jenkins 릴리스에서 성공적으로 테스트되었습니다.
경고: 이 우회 방법의 작동 방식으로 인해 정기적으로 Jenkins 백업을 수행하고 점진적으로 우회 방법을 배포하는 것을 강력히 권장합니다.
Jenkins 컨트롤러 프로세스를 악용으로부터 보호:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
지정된 RemoteClassLoader$ClassLoaderProxy.class 클래스 파일에 변환을 적용하고 결과를 다른 파일에 씁니다:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
이를 사용하여 최소한으로 수정된 remoting.jar 파일을 만들 수 있습니다.
두 가지 Java 시스템 속성을 설정하여 이 Java 에이전트의 동작을 변경할 수 있습니다:
io.jenkins.security.Security3430Workaround.DISABLE:
클래스 변환을 비활성화하려면 이를 true로 설정합니다.io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN:
클래스 변환 실패 시 Jenkins 프로세스를 중지하지 않으려면 이를 true로 설정합니다.
특정 좁은 상황에서만 권장됩니다(예: 로그 메시지를 면밀히 모니터링할 때, 아래 참조).둘 다 클래스가 로드되고 변환 시도가 이루어지기 전에 설정해야 하며, 이상적으로는 -D 명령줄 옵션으로 설정합니다.
로그 메시지는 io.jenkins.security.Security3430Workaround 로거를 사용합니다.
SEVERE 수준으로 기록된 메시지는 변환 실패를 나타냅니다.
연결된 Jenkins 에이전트의 스크립트 콘솔에서 다음 코드를 실행하여 이 우회 방법의 효과를 확인합니다:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
수정 사항이나 우회 방법이 모두 없으면 다음과 같은 메시지가 출력되어 악용 성공을 나타냅니다: Result: [B@23edd8a0
이 우회 방법을 적용하면 AbstractMethodError가 발생하고 긴 스택 트레이스가 출력됩니다.
MIT 라이선스 조건에 따라 사용이 허가됩니다. 저작권 2024 CloudBees, Inc.