- thymeleaf 버전 3.1.5.RELEASE 상향 및 주석 반영 수정
- Spring Boot CVE 6~11 건 억제 사유 추가: 배포별 영향 검토 - eai 오탐(CVE-2019-15079) 및 SBA client 오탐 억제 추가
This commit is contained in:
@@ -58,11 +58,14 @@
|
|||||||
<notes><![CDATA[
|
<notes><![CDATA[
|
||||||
오탐. CVE-2026-40477 / CVE-2026-40478 은 thymeleaf 본체 3.1.3.RELEASE 이하의 표현식 샌드박스
|
오탐. CVE-2026-40477 / CVE-2026-40478 은 thymeleaf 본체 3.1.3.RELEASE 이하의 표현식 샌드박스
|
||||||
우회 문제이고 3.1.4.RELEASE 에서 수정됐다. 이 프로젝트는 build.gradle 의 ext 에서
|
우회 문제이고 3.1.4.RELEASE 에서 수정됐다. 이 프로젝트는 build.gradle 의 ext 에서
|
||||||
thymeleaf.version=3.1.4.RELEASE / thymeleaf-extras-springsecurity.version=3.1.5.RELEASE 로
|
thymeleaf.version=3.1.5.RELEASE / thymeleaf-extras-springsecurity.version=3.1.5.RELEASE 로
|
||||||
올려 두었으므로 실제 실리는 jar 는 thymeleaf-3.1.4.RELEASE.jar 다.
|
올려 두었으므로 실제 실리는 jar 는 thymeleaf-3.1.5.RELEASE.jar 다.
|
||||||
Dependency-Check 가 spring-boot-starter-thymeleaf-2.7.18.jar(의존만 선언한 빈 starter)에
|
Dependency-Check 가 spring-boot-starter-thymeleaf-2.7.18.jar(의존만 선언한 빈 starter)에
|
||||||
thymeleaf CPE 를 잘못 매칭한 결과다. thymeleaf 본체 jar 에 대한 탐지는 억제하지 않는다.
|
thymeleaf CPE 를 잘못 매칭한 결과다. thymeleaf 본체 jar 에 대한 탐지는 억제하지 않는다.
|
||||||
확인: Rinjae / 2026-08-18 / WAR 내 thymeleaf-3.1.4.RELEASE.jar, thymeleaf-spring5-3.1.4.RELEASE.jar.
|
확인: Rinjae / 2026-08-18 / WAR 내 thymeleaf 본체 jar 가 수정본임을 확인.
|
||||||
|
재확인: Rinjae / 2026-09-15 / war classpath 실측 — thymeleaf-3.1.5.RELEASE.jar,
|
||||||
|
thymeleaf-spring5-3.1.5.RELEASE.jar, thymeleaf-extras-springsecurity5-3.1.5.RELEASE.jar.
|
||||||
|
(2026-08-18 주석의 3.1.4 표기는 이후 3.1.5 상향분이 반영되지 않은 것이라 함께 갱신함.)
|
||||||
]]></notes>
|
]]></notes>
|
||||||
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/spring-boot-starter-thymeleaf@.*$</packageUrl>
|
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/spring-boot-starter-thymeleaf@.*$</packageUrl>
|
||||||
<cve>CVE-2026-40477</cve>
|
<cve>CVE-2026-40477</cve>
|
||||||
@@ -118,4 +121,126 @@
|
|||||||
<cve>CVE-2026-22732</cve>
|
<cve>CVE-2026-22732</cve>
|
||||||
</suppress>
|
</suppress>
|
||||||
|
|
||||||
|
<!-- ================================================================================
|
||||||
|
Spring Boot High 4건 (2026-09-15 리포트 기준, spring-boot-2.7.18.jar 에 탐지됨).
|
||||||
|
|
||||||
|
공통 배경: 4건 모두 수정본이 2.7.33 이며 2.7.x 는 OSS EOL(마지막 OSS 릴리스 2.7.18)이라
|
||||||
|
상용(Enterprise/Tanzu) 구독 없이는 버전 상향으로 없앨 수 없다. 위 Critical 5건과 같은 제약이다.
|
||||||
|
아래는 "이 앱의 설정/배포 형태에 트리거 경로가 없음"을 근거로 한 억제이며 만료일을 둔다.
|
||||||
|
재검토 시 확인할 것: (1) 각 근거 grep 이 여전히 0건인지 (2) OSS 수정본이 나왔는지
|
||||||
|
(3) Boot 3 이관 여부.
|
||||||
|
================================================================================ -->
|
||||||
|
|
||||||
|
<!-- 6. Spring Boot: CloudFoundry Actuator 인증 우회 -->
|
||||||
|
<suppress until="2027-02-28Z">
|
||||||
|
<notes><![CDATA[
|
||||||
|
CVE-2026-22733 은 CloudFoundry Actuator 엔드포인트 경로(/cloudfoundryapplication) 아래에
|
||||||
|
인증이 필요한 애플리케이션 엔드포인트가 선언됐을 때 인증을 우회당하는 문제다.
|
||||||
|
취약 코드는 spring-boot-actuator-autoconfigure 의 cloudfoundry 패키지에 있고,
|
||||||
|
해당 자동설정은 CloudFoundry 런타임(VCAP_APPLICATION)에서만 활성화된다.
|
||||||
|
(1) 배포 산출물에 actuator 계열 jar 가 없다. build.gradle 의 localOnlyLibPrefixes 가
|
||||||
|
war/bootWar classpath 에서 devtools/actuator/micrometer/spring-boot-admin 을 제거한다.
|
||||||
|
(2) CloudFoundry 가 아니라 WebLogic 에 WAR 로 배포한다. CF 관련 설정/코드도 없다.
|
||||||
|
수정본 2.7.33 은 상용 릴리스라 OSS 로는 올릴 수 없다.
|
||||||
|
확인: Rinjae / 2026-09-15 / war·bootWar classpath 실측 — actuator/devtools/micrometer/SBA 0건
|
||||||
|
(spring-boot-2.7.18.jar 본체만 포함). 3개 모듈 전체 grep -rE "cloudfoundry|VCAP_" 0건.
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/.*@2\.7\..*$</packageUrl>
|
||||||
|
<cve>CVE-2026-22733</cve>
|
||||||
|
</suppress>
|
||||||
|
|
||||||
|
<!-- 7. Spring Boot DevTools: remote secret 타이밍 공격 -->
|
||||||
|
<suppress until="2027-02-28Z">
|
||||||
|
<notes><![CDATA[
|
||||||
|
CVE-2026-40972 는 DevTools 원격 연결의 secret 비교가 상수시간이 아니어서 타이밍 공격으로
|
||||||
|
secret 을 알아내고 원격 클래스 업로드(RCE)까지 갈 수 있는 문제다.
|
||||||
|
(1) 서버측 원격 DevTools 는 spring.devtools.remote.secret 이 설정돼야만 활성화된다.
|
||||||
|
3개 모듈 전체에 해당 프로퍼티가 없다. yml 의 devtools 설정은 restart/livereload 뿐이고
|
||||||
|
restart 는 모든 프로파일에서 enabled: false 다.
|
||||||
|
(2) 배포 산출물에 devtools jar 자체가 없다. developmentOnly 로 선언돼 runtimeClasspath
|
||||||
|
(= Dependency-Check 스캔 대상)에는 올라오지만 war/bootWar 에서는 제외된다.
|
||||||
|
수정본 2.7.33 은 상용 릴리스라 OSS 로는 올릴 수 없다.
|
||||||
|
확인: Rinjae / 2026-09-15 / grep -rE "devtools\.remote|remote\.secret|RemoteSpringApplication" 0건,
|
||||||
|
war·bootWar classpath 에 spring-boot-devtools 0건(스캔 대상 libs 에는 1건 존재).
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/.*@2\.7\..*$</packageUrl>
|
||||||
|
<cve>CVE-2026-40972</cve>
|
||||||
|
</suppress>
|
||||||
|
|
||||||
|
<!-- 8. Spring Boot: ApplicationTemp 디렉터리 선점 -->
|
||||||
|
<suppress until="2027-02-28Z">
|
||||||
|
<notes><![CDATA[
|
||||||
|
CVE-2026-40973 은 같은 호스트의 로컬 공격자가 ApplicationTemp 가 쓰는 임시 디렉터리를
|
||||||
|
선점했을 때 성립한다. 실제 피해(세션 탈취/가젯체인)는 server.servlet.session.persistent=true
|
||||||
|
로 세션을 파일에 영속화하고 그 상태가 재기동을 넘어 유지될 때의 이야기다.
|
||||||
|
(1) server.servlet.session.persistent 를 설정하지 않는다(기본 false). 3개 모듈 grep 0건.
|
||||||
|
(2) 이 포털의 세션 상태는 파일이 아니라 DB 에 보관한다(apps/session/, DatabaseSessionVerifier).
|
||||||
|
(3) 운영 배포는 WebLogic WAR 이라 세션 처리 주체가 내장 Tomcat 이 아니다.
|
||||||
|
spring-boot-2.7.18.jar 본체는 배포본에 실리므로 오탐이 아니라 "설정상 트리거 없음" 억제다.
|
||||||
|
수정본 2.7.33 은 상용 릴리스라 OSS 로는 올릴 수 없다.
|
||||||
|
확인: Rinjae / 2026-09-15 / grep -rE "session\.persistent|ApplicationTemp" 3개 모듈 0건.
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/.*@2\.7\..*$</packageUrl>
|
||||||
|
<cve>CVE-2026-40973</cve>
|
||||||
|
</suppress>
|
||||||
|
|
||||||
|
<!-- 9. Spring Boot: ${random.value} 를 secret 으로 쓰면 예측 가능 -->
|
||||||
|
<suppress until="2027-02-28Z">
|
||||||
|
<notes><![CDATA[
|
||||||
|
CVE-2026-40975 는 프로퍼티 플레이스홀더 ${random.value} / ${random.int} / ${random.long} 이
|
||||||
|
암호학적으로 안전하지 않아 secret 용도로 쓰면 예측 가능하다는 문제다(${random.uuid} 는 무관).
|
||||||
|
이 프로젝트는 ${random.*} 플레이스홀더를 어디에서도 쓰지 않는다.
|
||||||
|
(참고: 인증토큰/임시비밀번호 등 실제 비밀값 생성은 애플리케이션 코드에서 처리하며
|
||||||
|
이 CVE 의 대상인 RandomValuePropertySource 와 무관하다.)
|
||||||
|
spring-boot-2.7.18.jar 본체는 배포본에 실리므로 "미사용" 근거의 억제다.
|
||||||
|
수정본 2.7.33 은 상용 릴리스라 OSS 로는 올릴 수 없다.
|
||||||
|
확인: Rinjae / 2026-09-15 / grep -rE "random\.value|random\.int|random\.long" 3개 모듈 0건.
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/.*@2\.7\..*$</packageUrl>
|
||||||
|
<cve>CVE-2026-40975</cve>
|
||||||
|
</suppress>
|
||||||
|
|
||||||
|
<!-- 10. elink-common-data: 이더리움 토큰 CVE 오탐 (패키지명 'eai' 매칭) -->
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
오탐. CVE-2019-15079 는 'EAI' 라는 이더리움 ERC-20 토큰의 스마트 컨트랙트(Solidity) 생성자에
|
||||||
|
오타가 있어 토큰을 무상 취득할 수 있는 문제다. CPE 가 cpe:2.3:a:eai_project:eai:*:* 이며
|
||||||
|
자바 라이브러리와는 아무 관련이 없다.
|
||||||
|
오탐이 난 이유: elink-common-data-4.5.5.jar 는 MANIFEST 에 Manifest-Version 한 줄뿐이고
|
||||||
|
pom.properties 도 없어서 Dependency-Check 가 벤더/제품을 판단할 근거가 없다. 그래서
|
||||||
|
유일한 패키지 경로인 com/eactive/eai/data 에서 제품명을 'eai' 로 추론해 위 CPE 에 매칭했다.
|
||||||
|
여기서 eai 는 사내 EAI(Enterprise Application Integration) 의 약어다.
|
||||||
|
버전을 고정하지 않은 이유: 원인이 패키지명이라 이 아티팩트의 버전을 올려도 같은 오탐이 재발한다.
|
||||||
|
확인: Rinjae / 2026-09-15 / jar 내부 실측 — 최상위 패키지 com/eactive/eai/data 단일,
|
||||||
|
.sol/ethereum/token 관련 파일 0건, 총 45개 항목. SHA-1 7e2b7168604d4fbd8c383a4cd7558e8581477a78
|
||||||
|
로 리포트 대상 jar 와 동일함을 확인. NVD 원문 CPE 대조 완료.
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/com\.eactive\.elink\.common/elink-common-data@.*$</packageUrl>
|
||||||
|
<cve>CVE-2019-15079</cve>
|
||||||
|
</suppress>
|
||||||
|
|
||||||
|
<!-- 11. spring-boot-admin-client: SBA 서버 SSTI 오탐 -->
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
오탐. CVE-2023-38286 은 Thymeleaf 3.1.1.RELEASE 이하의 샌드박스 우회를 Spring Boot Admin
|
||||||
|
서버에서 SSTI/코드실행으로 엮을 수 있다는 내용이고, 성립 조건이 "MailNotifier 활성화 +
|
||||||
|
UI 를 통한 환경변수 쓰기 권한"이다. 세 가지 이유로 이 프로젝트에는 성립하지 않는다.
|
||||||
|
(1) 우리가 쓰는 건 서버가 아니라 client 다. spring-boot-admin-client-2.7.16.jar 안에는
|
||||||
|
de/codecentric/boot/admin/client/** 의 등록(registration)·설정 클래스뿐이고
|
||||||
|
MailNotifier / thymeleaf 템플릿 / html 리소스가 0건이다. 취약 코드가 있는
|
||||||
|
spring-boot-admin-server 는 의존성에 아예 없다.
|
||||||
|
(2) thymeleaf 를 3.1.5.RELEASE 로 올려 두어 취약 범위(3.1.1 이하)를 벗어난다. 위 2번 항목 참고.
|
||||||
|
(3) 배포 산출물에 SBA jar 자체가 없다. build.gradle 의 localOnlyLibPrefixes 가
|
||||||
|
war/bootWar classpath 에서 spring-boot-admin-* 을 제거한다(로컬 모니터링 전용).
|
||||||
|
NVD 의 CPE 는 cpe:2.3:a:codecentric:spring_boot_admin:* (versionEndIncluding 3.1.0) 이라
|
||||||
|
client/server 구분이 없어 2.7.16 도 범위에 들어온다. Dependency-Check 가 이 CPE 를
|
||||||
|
client 아티팩트에 그대로 매칭한 것이 오탐의 원인이다.
|
||||||
|
확인: Rinjae / 2026-09-15 / jar 내부 실측 — MailNotifier/thymeleaf/html 0건,
|
||||||
|
SHA-1 04c3df4a292fb879555f61db19e5bf0b7c8fc54b 로 리포트 대상과 동일.
|
||||||
|
war classpath 실측 — spring-boot-admin-* 0건, thymeleaf-3.1.5.RELEASE.jar 포함.
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/de\.codecentric/spring-boot-admin-.*@.*$</packageUrl>
|
||||||
|
<cve>CVE-2023-38286</cve>
|
||||||
|
</suppress>
|
||||||
|
|
||||||
</suppressions>
|
</suppressions>
|
||||||
|
|||||||
Reference in New Issue
Block a user