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:
@@ -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`)이므로
|
||||
|
||||
@@ -32,6 +32,7 @@ M2="${M2_BASE:-https://repo1.maven.org/maven2}"
|
||||
: "${NETTY_OLD:?}" "${NETTY_VERSION:?}"
|
||||
: "${JACKSON_OLD:?}" "${JACKSON_VERSION:?}"
|
||||
: "${PGJDBC_OLD:?}" "${PGJDBC_VERSION:?}"
|
||||
: "${MICROMETER_OLD:?}" "${MICROMETER_VERSION:?}"
|
||||
|
||||
# groupId(파일명 프리픽스) | groupPath(Maven 경로) | artifact 필터 | OLD | NEW
|
||||
# artifact 필터가 '*' 이면 해당 groupId + OLD 버전의 모든 jar 가 대상이다.
|
||||
@@ -40,6 +41,7 @@ SPECS=(
|
||||
"com.fasterxml.jackson.core|com/fasterxml/jackson/core|jackson-core|${JACKSON_OLD}|${JACKSON_VERSION}"
|
||||
"com.fasterxml.jackson.core|com/fasterxml/jackson/core|jackson-databind|${JACKSON_OLD}|${JACKSON_VERSION}"
|
||||
"org.postgresql|org/postgresql|postgresql|${PGJDBC_OLD}|${PGJDBC_VERSION}"
|
||||
"io.micrometer|io/micrometer|*|${MICROMETER_OLD}|${MICROMETER_VERSION}"
|
||||
)
|
||||
|
||||
fetch() { # $1=url $2=출력경로
|
||||
|
||||
@@ -42,6 +42,8 @@ ARG JACKSON_OLD
|
||||
ARG JACKSON_VERSION
|
||||
ARG PGJDBC_OLD
|
||||
ARG PGJDBC_VERSION
|
||||
ARG MICROMETER_OLD
|
||||
ARG MICROMETER_VERSION
|
||||
|
||||
# (a) 런타임 rootfs 구성.
|
||||
#
|
||||
|
||||
@@ -54,5 +54,11 @@ JACKSON_VERSION=2.21.4
|
||||
# postgresql jdbc: CVE-2026-54291
|
||||
PGJDBC_OLD=42.7.11
|
||||
PGJDBC_VERSION=42.7.12
|
||||
# micrometer: CVE-2026-40983, CVE-2026-40984 (micrometer-core)
|
||||
# netty 와 같은 이유로 패밀리 전체(commons·core·observation·registry-prometheus-
|
||||
# simpleclient)를 함께 올린다. 이 2건은 2026-08-07 로컬 스캔에는 없었고 같은 날
|
||||
# CI(더 최신 trivy DB)에서 처음 잡혔다 — 로컬 DB 가 뒤처질 수 있다는 실례다.
|
||||
MICROMETER_OLD=1.16.3
|
||||
MICROMETER_VERSION=1.16.6
|
||||
|
||||
BUILD_ARGS="KEYCLOAK_VERSION BUILDER_BASE MICRO_BASE RUNTIME_PACKAGES NETTY_OLD NETTY_VERSION JACKSON_OLD JACKSON_VERSION PGJDBC_OLD PGJDBC_VERSION"
|
||||
BUILD_ARGS="KEYCLOAK_VERSION BUILDER_BASE MICRO_BASE RUNTIME_PACKAGES NETTY_OLD NETTY_VERSION JACKSON_OLD JACKSON_VERSION PGJDBC_OLD PGJDBC_VERSION MICROMETER_OLD MICROMETER_VERSION"
|
||||
|
||||
@@ -22,6 +22,7 @@ KEYCLOAK_VERSION="${KEYCLOAK_VERSION:?build.env 에서 전달돼야 한다}"
|
||||
NETTY_OLD="${NETTY_OLD:?}" ; NETTY_VERSION="${NETTY_VERSION:?}"
|
||||
JACKSON_OLD="${JACKSON_OLD:?}" ; JACKSON_VERSION="${JACKSON_VERSION:?}"
|
||||
PGJDBC_OLD="${PGJDBC_OLD:?}" ; PGJDBC_VERSION="${PGJDBC_VERSION:?}"
|
||||
MICROMETER_OLD="${MICROMETER_OLD:?}" ; MICROMETER_VERSION="${MICROMETER_VERSION:?}"
|
||||
|
||||
WORK="$(mktemp -d)"
|
||||
CID=""
|
||||
@@ -124,6 +125,7 @@ check_jar "io.netty.netty-codec-${NETTY_OLD}.jar"
|
||||
check_jar "com.fasterxml.jackson.core.jackson-databind-${JACKSON_OLD}.jar" "$JACKSON_VERSION"
|
||||
check_jar "com.fasterxml.jackson.core.jackson-core-${JACKSON_OLD}.jar" "$JACKSON_VERSION"
|
||||
check_jar "org.postgresql.postgresql-${PGJDBC_OLD}.jar" "$PGJDBC_VERSION"
|
||||
check_jar "io.micrometer.micrometer-core-${MICROMETER_OLD}.jar" "$MICROMETER_VERSION"
|
||||
|
||||
docker rm -f "$CCID" >/dev/null 2>&1 || true
|
||||
CCID=""
|
||||
|
||||
Reference in New Issue
Block a user