apache / apache/iceberg

Multiple custom decoders allocate heap memory directly from file-controlled sizes without defensive caps

Open
#16,458 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.