Multiple custom decoders allocate heap memory directly from file-controlled sizes without defensive caps
- Dominant language
- Java
- Stars
- 9.2k
- Forks
- 3.5k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 132
Description
> This issue was reported to the private Apache Iceberg security mailing list. The submitter is being kept anonymous because the report was sent to a private list. After review, the issue is not considered a serious vulnerability that needs to be kept private, so it is being filed publicly here for tracking and resolution.
>
> Note: this submission was generated by AI. Please review its claims and source references carefully before acting on them.
# Summary
Multiple Parquet decoders allocate heap directly from file-controlled
sizes without hard caps, creating read-time heap denial of service
paths.
# Affected Maven coordinates
* primary shipped client artifact: `org.apache.iceberg:iceberg-arrow`
# Attacker prerequisites
* ability to make the target process parse attacker-controlled or
semi-trusted table data or metadata
* enough repetition or input size to trigger the unchecked allocation
or crash path
# Impact
* A crafted Parquet page can trigger large heap allocations before
row-level limits or caller-visible batch sizes reduce the work.
* The likely failure mode is JVM heap exhaustion or repeated GC
pressure severe enough to deny service.
# Proof status
Source review only. The issue is visible directly from source.
# Key source references
* org.apache.iceberg.arrow.vectorized.parquet.VectorizedDeltaEncodedValuesReader
* org.apache.iceberg.arrow.vectorized.parquet.BaseVectorizedParquetValuesReader
* org.apache.iceberg.arrow.vectorized.parquet.VectorizedByteStreamSplitValuesReader
* org.apache.iceberg.arrow.vectorized.parquet.VectorizedDeltaLengthByteArrayValuesReader
* org.apache.iceberg.arrow.vectorized.parquet.VectorizedDeltaByteArrayValuesReader
Contributor guide
Research direction
Review the allocation paths in VectorizedDeltaEncodedValuesReader, BaseVectorizedParquetValuesReader, VectorizedByteStreamSplitValuesReader, VectorizedDeltaLengthByteArrayValuesReader, and VectorizedDeltaByteArrayValuesReader. Trace which sizes come from Parquet input, then confirm that defensive caps prevent excessive heap allocation and add regression coverage for the affected decoder paths.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100