add-keycloakx: micrometer 오버레이 추가 (CI 에서 새로 잡힌 차단 2건)

CI(31148639764)의 trivy 취약점 DB 가 로컬보다 최신이라 로컬 스캔에는 없던
CVE-2026-40983·CVE-2026-40984(io.micrometer:micrometer-core)가 차단으로 잡혔다.
netty·jackson 과 동일한 성격의 번들 jar CVE 라 같은 오버레이 메커니즘으로 처리한다.

micrometer 1.16.3 → 1.16.6. netty 와 같은 이유로 CVE 가 붙은 micrometer-core 만이
아니라 패밀리 전체 4종(commons·core·observation·registry-prometheus-simpleclient)을
함께 올린다 — 아티팩트 간 버전 혼용이 비지원이다.

Dockerfile 의 ARG 선언을 처음에 빠뜨렸는데 overlay-jars.sh 의 `: "${VAR:?}"` 가드가
설계대로 빌드를 세웠다("parameter null or not set"). 조용히 통과하지 않는다.

재빌드 결과(로컬 trivy DB 캐시를 지우고 CI 와 같은 최신 DB 로 재판정):

  차단 0건 — 게이트 PASS
  docker.io/paasup/keycloak:26.7.1-bci15.7-hardened-20260807 push 완료

태그는 빌드일 기준이라 같은 날 재빌드가 같은 태그를 덮는다(프레임워크 설계대로).
직전에 push 된 것은 micrometer 취약점이 남아 있던 빌드이고 어디에도 소비되지 않았다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
wbsong111
2026-08-07 14:05:05 +09:00
parent a27c2a9423
commit 4e12e38293
5 changed files with 33 additions and 9 deletions
+17 -5
View File
@@ -107,11 +107,23 @@ Security Advisory 실측). 스캔 시점 trivy DB 에 아직 없어 게이트에
이미지 SBOM 의 rpm 44종을 근거로 정했다. `sed`·`grep`**없으면 안 된다**
`bin/kc.sh``/bin/sh` 스크립트로 `esceval()` 에서 `sed`, 인자 파싱에서 `grep`
쓰는데 `bci-micro` 에는 `sed` 가 없다.
2. **취약 jar 오버레이** (`overlay-jars.sh`) — `lib/lib/main/`netty·jackson·
postgresql-jdbc jar 를 **파일명은 유지하고 내용만** 수정 버전으로 바꾼다. Quarkus
fast-jar 의 클래스패스가 파일명을 그대로 참조하기 때문이다. trivy 는 jar 내부
`META-INF/maven/**/pom.properties` 를 읽으므로 SBOM 에는 새 버전이 정확히 잡힌다
— 파일명으로 버전을 위장하는 것이 아니라 실제 내용이 새 버전이다.
2. **취약 jar 오버레이** (`overlay-jars.sh`) — `lib/lib/main/`jar 를 **파일명은
유지하고 내용만** 수정 버전으로 바꾼다. Quarkus fast-jar 의 클래스패스가 파일명을
그대로 참조하기 때문이다. 대상은 `suse.build.env``*_OLD`/`*_VERSION` 이 정의한다:
| 그룹 | 대상 | 버전 |
| --- | --- | --- |
| `io.netty` | 패밀리 전체 17종 | `4.1.135.Final``4.1.136.Final` |
| `com.fasterxml.jackson.core` | `jackson-core`, `jackson-databind` | `2.21.2``2.21.4` |
| `org.postgresql` | `postgresql` | `42.7.11``42.7.12` |
| `io.micrometer` | 패밀리 전체 4종 | `1.16.3``1.16.6` |
netty·micrometer 는 CVE 가 붙은 아티팩트만이 아니라 **패밀리 전체**를 함께 올린다 —
둘 다 아티팩트 간 버전 혼용이 비지원이다. jackson 은 2.21.x 안에서 호환이 보장되고
`jackson-annotations``2.21` 로 별도 버저닝돼 있어 CVE 있는 둘만 바꾼다.
위장이 아니다 — trivy 는 jar 내부 `META-INF/maven/**/pom.properties`(없으면 sha1↔GAV
인덱스)로 버전을 판정하므로 SBOM 에는 새 버전이 정확히 잡히고, 실제 내용도 새 버전이다.
3. **`bin/client/` 제거** — `keycloak-admin-cli-<ver>.jar` 는 jackson 을 shade 로 품은
uber-jar 라 jar 교체로 고칠 수 없다(SBOM 실측: `jackson-databind@2.21.2`
FilePath 가 이 파일). 서버 JVM 이 로드하지 않는 독립 CLI(`kcadm.sh`/`kcreg.sh`)이므로