
Log4j 취약점 PoC를 위한 Docker 이미지 및 k8s YAML (Log4j (CVE-2021-44228 RCE 취약점))
이 리포지토리에는 log4j 취약점을 재현하는 데 필요한 Docker 및 k8s YAML이 포함되어 있습니다(아래 참조).
모든 내용이 어떻게 연결되는지 이해하려면 이 블로그를 참조하세요.
Docker 이미지를 사용자 지정해야 하는 경우
cd <Git-Repo>/web-server
make build push
cd <Git-Repo>/marshalsec
make build push
cd <Git-Repo>/attack-server
make build push
푸시하기 전에 DockerHub를 업데이트하여 사용자 ID를 반영해야 합니다.
POC의 경우 Docker 이미지를 사용자 지정할 필요가 없습니다.
k8s 폴더 아래의 YAML을 모든 Kubernetes 클러스터에 배포할 수 있습니다.
cd <Git-Repo>/k8s
kubectl create -f .
이렇게 하면 클러스터에 3개의 POD가 배포되며, 각 POD는 log4j 취약점의 작동 방식을 이해하기 위해 각자의 역할을 수행하는 '액터'를 나타냅니다.
여기에 포함된 YAML 외에도 공개 엔드포인트에서 취약한 웹 앱을 테스트하려면 Kubernetes 클러스터에 Ingress를 배포해야 합니다.
다음은 Ngnix-Ingress에서 작동하는 샘플입니다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: log4j-ingress
labels:
app: log4j
env: dev
namespace: log4j
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
#nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- <YOUR-DOMAIN-NAME-HERE>
#secretName: tls-java-secret
rules:
- host: <YOUR-DOMAIN-NAME-HERE>
http:
paths:
- path: /
backend:
serviceName: log4j-webserver
servicePort: 8080