nevzheng opened a new issue, #13157:
URL: https://github.com/apache/gravitino/issues/13157

   ## Summary
   
   The first repository-wide container scan found a substantial dependency 
backlog and gaps in image discovery. Prioritize maintained image rebuilds and 
verified coverage—not a blanket vulnerability-count gate.
   
   On 2026-09-14, **40 of 43 image targets were scanned successfully; three 
snapshot tags were unavailable**. Thirty-seven images had High/Critical 
package-advisory matches; 33 had at least one database-recorded package fix. 
These counts do not establish exploitability or the availability of compatible 
replacement image tags.
   
   ## Desired outcome
   
   Reduce validated risk in images we publish, recommend, and use in CI. 
Rebuild or update affected images, preserve intentional compatibility testing, 
and demonstrate improvements through targeted tests and repeat scans.
   
   This follows the advisory monitoring work in #13156. Keep findings and scan 
failures **warnings-only**. Automatic ticket filing, merge gates, and blanket 
suppression are out of scope.
   
   ## Acceptance criteria
   
   - [ ] Triage the priority groups below: record affected package locations, 
relevant runtime exposure, and a remediation or reasoned deferral.
   - [ ] Validate compatible replacements for the shared Java server base, Helm 
database defaults, and MCP base; rebuild and scan final images, not only their 
bases.
   - [ ] Rebuild affected legacy CI fixtures or explicitly track remaining 
exceptions, preserving required old-version test coverage.
   - [ ] Add regression coverage for the missed OAuth image declaration and 
reconcile discovered images against an independently checked inventory.
   - [ ] Resolve the three unavailable snapshot references by identifying 
intended published images or scanning actual build outputs; do not substitute 
arbitrary tags.
   - [ ] Record before/after image digests, scan evidence, and relevant 
integration/Helm test results for each update. Failed or incomplete scans must 
never count as remediation.
   - [ ] Document residual coverage limits, including RustFS embedded 
dependencies, runtime overrides, and architecture coverage.
   
   ## Evidence
   
   This was a **local registry-image scan**, not a hosted workflow run or a 
penetration test. No target containers were executed.
   
   | Result | Baseline |
   | --- | --- |
   | Targets | 41 discovered references + RustFS pin + missed OAuth image |
   | Successful / unavailable / timed out | 40 / 3 / 0 |
   | Raw Critical / High matches | 3,558 / 20,923 |
   | Matches with recorded package fixes | 2,774 Critical / 11,564 High |
   | Distinct advisory identifiers | 2,155; not alias-deduplicated CVEs |
   | Tools / platform | Syft 1.51.1; Grype 0.118.0; Linux amd64 registry images 
|
   | Database | v6.1.9, built 2026-09-14 06:38:38 UTC; held constant during the 
sweep |
   | Source revision | Monitoring branch commit 
`7c3a1e7caa381ffa0231f840534a810d2d73d86c` |
   
   Raw SBOMs, vulnerability JSON, scanner logs, and the detailed CSV are 
retained locally (~2.6 GiB); they are **not yet attached to GitHub**. Appendix 
B embeds the per-image summary so this issue remains readable without local 
files. An accessible evidence location should be agreed before treating this 
issue as the durable audit record.
   
   ## Supporting details
   
   ### Appendix A — Recommended action order
   
   Priorities reflect deployment scope and ownership, not severity totals alone.
   
   | Workstream | Observed evidence | Proposed action |
   | --- | --- | --- |
   | Shared Java server base | Temurin `17.0.16_8-jdk-jammy`: 20 High matches, 
all with recorded package fixes; used by three server Dockerfiles | Refresh a 
compatible Java 17 base, rebuild Gravitino/Iceberg REST/Lance REST images, test 
and rescan |
   | Helm database defaults | Legacy MySQL/PostgreSQL images: 82 Critical / 451 
High combined | Evaluate maintained images and validate chart startup, 
persistence, permissions, and upgrade compatibility |
   | MCP base | `python:3.10`: 122 Critical / 509 High; includes OS/build-tool 
packages | Evaluate a refreshed/minimal compatible base and test native 
dependencies in the final MCP image |
   | Legacy Hive/Kerberos/Ranger | Hive `0.1.13` includes `log4j-core 2.6.2` at 
`/opt/apache-hive-2.3.9-bin/lib/log4j-core-2.6.2.jar`, matched to 
CVE-2021-44228 | Update bundled distributions and remove unused vulnerable 
archives; do not blindly replace one JAR or assume existing newer fixture tags 
are clean |
   | Service/plugin images | Repeated JDBC, Avro, Parquet, Netty and other 
bundled-library findings in Trino and related images | Validate relevant 
features/classpaths; update compatible upstream distributions and internal 
wrappers |
   | OAuth sample + discovery | `datastrato/sample-authorization-server:0.3.0`: 
71 Critical / 399 High; Gradle's `GRAVITINO_OAUTH2_SAMPLE_SERVER` literal was 
missed | Fix discovery with a regression test; coordinate a compatible 
sample-image rebuild |
   
   Source owners include 
`dev/docker/{gravitino,iceberg-rest-server,lance-rest-server,mcp-server,hive,kerberos-hive,ranger,trino}/Dockerfile`,
 `dev/charts/gravitino/values.yaml`, root `build.gradle.kts`, and 
`clients/client-python/build.gradle.kts`.
   
   ### Appendix B — Complete initial per-image report
   
   Counts are **package/advisory matches**, including repeated library copies. 
“Fixable C/H” means a database-recorded package fix, not a validated 
replacement image.
   
   | Image | Status | Critical | High | Medium | Low | Negligible | Unknown | 
Fixable C/H |
   | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
   | `docker.io/apache/doris:fe-3.0.6.2` | success | 162 | 2865 | 34632 | 3925 
| 228 | 0 | 68/541 |
   | `docker.io/apache/doris:fe-4.0.6` | success | 121 | 2660 | 33710 | 3804 | 
227 | 0 | 29/351 |
   | `docker.io/apache/gravitino-ci:doris-0.1.5` | success | 212 | 3133 | 35739 
| 4013 | 208 | 0 | 110/787 |
   | `docker.io/apache/gravitino-ci:hive-0.1.13` | success | 613 | 1229 | 5816 
| 932 | 244 | 0 | 548/1102 |
   | `docker.io/apache/gravitino-ci:hive-0.1.20` | success | 576 | 1273 | 5890 
| 946 | 244 | 0 | 507/1178 |
   | `docker.io/apache/gravitino-ci:kerberos-hive-0.1.7` | success | 311 | 637 
| 5651 | 893 | 260 | 0 | 271/581 |
   | `docker.io/apache/gravitino-ci:ranger-0.1.2` | success | 133 | 480 | 353 | 
59 | 975 | 5 | 123/314 |
   | `docker.io/apache/gravitino-ci:trino-0.1.6` | success | 11 | 320 | 638 | 
254 | 0 | 0 | 11/290 |
   | `docker.io/apache/gravitino-iceberg-rest:2.0.0-SNAPSHOT` | syft-failure | 
— | — | — | — | — | — | —/— |
   | `docker.io/apache/gravitino-lance-rest:2.0.0-SNAPSHOT` | syft-failure | — 
| — | — | — | — | — | —/— |
   | `docker.io/apache/gravitino-playground:hive-0.1.15` | success | 576 | 1273 
| 5890 | 946 | 244 | 0 | 507/1178 |
   | `docker.io/apache/gravitino:2.0.0-SNAPSHOT` | syft-failure | — | — | — | — 
| — | — | —/— |
   | `docker.io/apache/kafka:3.7.0` | success | 5 | 68 | 82 | 24 | 0 | 0 | 5/52 
|
   | `docker.io/bitnamilegacy/mysql:8.0.36-debian-12-r12` | success | 41 | 200 
| 191 | 21 | 549 | 24 | 17/126 |
   | `docker.io/bitnamilegacy/postgresql:16.3.0-debian-12-r10` | success | 41 | 
251 | 212 | 39 | 101 | 32 | 13/168 |
   | `docker.io/curlimages/curl:latest` | success | 0 | 10 | 11 | 1 | 0 | 0 | 
0/0 |
   | `docker.io/library/clickhouse:24.8.14` | success | 0 | 3 | 242 | 88 | 8 | 
0 | 0/0 |
   | `docker.io/library/debian:buster` | success | 0 | 30 | 29 | 11 | 66 | 4 | 
0/0 |
   | `docker.io/library/eclipse-temurin:17.0.16_8-jdk-jammy` | success | 0 | 20 
| 468 | 199 | 15 | 0 | 0/20 |
   | `docker.io/library/mysql:5.7` | success | 5 | 96 | 85 | 13 | 0 | 0 | 5/96 |
   | `docker.io/library/mysql:8.0` | success | 1 | 42 | 78 | 9 | 0 | 0 | 1/42 |
   | `docker.io/library/mysql:8.0.33` | success | 5 | 127 | 196 | 29 | 0 | 0 | 
5/127 |
   | `docker.io/library/postgres:12` | success | 44 | 258 | 241 | 40 | 123 | 32 
| 16/174 |
   | `docker.io/library/postgres:13` | success | 43 | 230 | 183 | 36 | 105 | 52 
| 42/170 |
   | `docker.io/library/postgres:14` | success | 32 | 137 | 103 | 24 | 96 | 16 
| 31/77 |
   | `docker.io/library/postgres:15` | success | 32 | 137 | 103 | 24 | 96 | 16 
| 31/77 |
   | `docker.io/library/postgres:16` | success | 32 | 137 | 103 | 24 | 96 | 16 
| 31/77 |
   | `docker.io/library/python:3.10` | success | 122 | 509 | 528 | 186 | 892 | 
27 | 71/278 |
   | `docker.io/library/ubuntu:16.04` | success | 0 | 6 | 245 | 169 | 108 | 0 | 
0/0 |
   | `docker.io/library/ubuntu:22.04` | success | 0 | 0 | 60 | 18 | 8 | 0 | 0/0 
|
   | `docker.io/library/zookeeper:3.8.0` | success | 27 | 203 | 234 | 56 | 105 
| 22 | 17/169 |
   | `docker.io/localstack/localstack:4.14.0` | success | 68 | 378 | 332 | 63 | 
587 | 47 | 43/286 |
   | `docker.io/localstack/localstack:latest` | success | 23 | 85 | 73 | 10 | 
553 | 44 | 7/19 |
   | `docker.io/motoserver/moto:5.1.4` | success | 32 | 183 | 202 | 25 | 107 | 
24 | 10/108 |
   | `docker.io/oceanbase/oceanbase-ce:4.2.1-lts` | success | 2 | 143 | 542 | 
399 | 2 | 0 | 2/126 |
   | `docker.io/starrocks/allin1-ubuntu:3.3-latest` | success | 109 | 1556 | 
13248 | 1357 | 81 | 0 | 90/962 |
   | `docker.io/trinodb/trino:440` | success | 50 | 851 | 1230 | 454 | 0 | 0 | 
48/814 |
   | `docker.io/trinodb/trino:478` | success | 19 | 739 | 888 | 327 | 0 | 0 | 
19/726 |
   | `docker.io/wenjunxiao/desktop-docker-connector:latest` | success | 14 | 
150 | 110 | 7 | 0 | 0 | 7/79 |
   | `ghcr.io/astral-sh/uv:latest` | success | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
   | `quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z` | success | 25 | 105 | 
138 | 25 | 0 | 4 | 25/101 |
   | 
`docker.io/rustfs/rustfs:1.0.0-rc.6@sha256:97171b3d72cd47dc81000f92ea84de25608bfc35a94c965501afaeb5d99f6035
 (supplementary)` | success | 0 | 0 | 16 | 0 | 0 | 0 | 0/0 |
   | `docker.io/datastrato/sample-authorization-server:0.3.0 (supplementary)` | 
success | 71 | 399 | 1554 | 312 | 28 | 0 | 64/368 |
   
   The three unavailable tags returned `MANIFEST_UNKNOWN`. They are chart 
defaults, not successful clean scans.
   
   ### Appendix C — Interpretation and coverage limits
   
   - **9,082 High/Critical matches concern `linux-*` tool packages.** 
Source-package associations can attach kernel advisories to userspace tools; 
this scan does not establish host-kernel exposure.
   - Repeated JARs inflate totals. Package presence does not establish runtime 
loading or exploitability.
   - Sixteen scans lacked Go function symbols and used module-level matching; 
advisories may concern unused features.
   - RustFS returned 16 Medium and no High/Critical matches, but only 35 OS 
packages and **no Rust crates** were inventoried. Request supplier SBOMs or 
auditable build metadata. Do not infer that RustFS is safer than MinIO from 
unequal coverage.
   - Discovery recorded 17 unresolved dynamic/local-build declarations. The 
OAuth miss is additional evidence that static discovery is incomplete.
   - This baseline does not fully cover other architectures, runtime overrides, 
implicit Testcontainers helper images, generated/downloaded definitions, 
transitive chart defaults, or final locally built images.
   - Historical per-advisory fixed versions are not current upgrade 
recommendations. Validate vendor guidance and compatibility before selecting 
replacements.
   
   References: [Log4Shell 
advisory](https://github.com/advisories/GHSA-jfh8-c2jp-5v3q), [Apache Logging 
security guidance](https://logging.apache.org/security.html), [Grype matching 
and coverage](https://oss.anchore.com/docs/guides/vulnerability/ecosystems/).
   
   ## Related work
   
   Related to #13154, #13155, and #13156.
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to