Introduction
CVE-2026-47321 represents a critical vulnerability in Apache MINA’s CompressionFilter class that can lead to denial-of-service (DoS) attacks through memory exhaustion. This advisory provides security teams and development organizations with comprehensive guidance on identifying, assessing, and remediating this vulnerability. By the end of this analysis, you will understand the technical mechanisms behind the flaw, how to detect it in your environment, and the specific steps required to implement effective mitigations.
What is CVE-2026-47321?
Vulnerability Overview
CVE-2026-47321 is a memory exhaustion vulnerability affecting the CompressionFilter class in Apache MINA, a network application framework. The vulnerability stems from insufficient validation of decompressed data sizes during the inflation process, allowing attackers to trigger excessive memory consumption and cause application crashes or service unavailability.
The core issue lies in the framework’s inability to enforce limits on how large decompressed data can become. When an application receives compressed data through Apache MINA’s compression filter, the framework decompresses it without checking whether the resulting uncompressed payload exceeds reasonable memory thresholds. This creates a direct path for resource exhaustion attacks.
Key Facts:
- Vulnerability Type: Denial of Service (DoS) via Resource Exhaustion
- Attack Complexity: Low—requires only sending specially crafted compressed payloads
- Authentication Required: No
- User Interaction: None
- Scope: Changed (can affect other systems sharing resources)
Affected Component: CompressionFilter Class
The CompressionFilter class is responsible for compressing and decompressing data streams in Apache MINA applications. It uses ZLib (a standard compression library) to handle the compression operations. While ZLib itself is secure, the CompressionFilter implementation failed to implement critical safeguards around the decompression process.
Vulnerable Code Pattern:
// Vulnerable implementation - no size limits enforced
public void messageReceived(IoFilterChain chain, IoSession session, Object message) {
byte[] compressedData = (byte[]) message;
byte[] decompressedData = decompress(compressedData); // No size validation
chain.fireMessageReceived(decompressedData);
}
The vulnerability exists because the decompression operation can expand data by arbitrary ratios. A 1 MB compressed file could theoretically decompress to 1 GB or more, depending on the compression ratio and the attacker’s crafting of the payload.
Root Cause: Uncontrolled Decompression Size
The fundamental root cause is the absence of configurable limits on decompressed data size. Apache MINA’s CompressionFilter did not provide developers with mechanisms to:
- Set maximum decompressed size limits – preventing individual payloads from consuming excessive memory
- Enforce decompression ratio limits – detecting suspiciously high compression ratios that indicate potential attacks
- Validate minimum thresholds – distinguishing between legitimate and malicious compression patterns
This design flaw means that any application using CompressionFilter with untrusted input sources is vulnerable to memory exhaustion attacks.
Which Systems Are at Risk?
Affected Products and Versions
Product: Apache MINA
Affected Versions: All versions prior to the security patch for CVE-2026-47321
Organizations should verify their specific version by checking:
- Maven dependency declarations (
pom.xml) - Gradle build files (
build.gradle) - Direct JAR file manifests
- Application startup logs
Version Check Command:
grep -r "mina-core" pom.xml
# or
grep -r "org.apache.mina" build.gradle
Deployment Scenarios Most Vulnerable
Certain deployment patterns significantly increase risk exposure:
High-Risk Scenarios:
- Internet-facing applications receiving data from untrusted sources
- API gateways and load balancers processing external requests
- Message brokers and queue systems handling compressed payloads
- IoT platforms receiving sensor data with compression enabled
- Real-time communication systems (chat, gaming, streaming) using compression
Moderate-Risk Scenarios:
- Internal applications with network segmentation
- Systems with rate limiting and traffic filtering
- Applications with existing resource quotas
Lower-Risk Scenarios:
- Closed-loop systems with trusted endpoints only
- Applications not using the CompressionFilter feature
- Systems with strict input validation and size restrictions already in place
Why Your Organization Should Care
The business impact of this vulnerability extends beyond technical concerns:
| Impact Area | Consequence |
|---|---|
| Availability | Service outages affecting customer access and revenue |
| Reputation | Loss of customer trust due to DoS incidents |
| Compliance | Potential violations of SLA commitments and regulatory requirements |
| Operations | Incident response costs and emergency patching efforts |
| Security Posture | Exploitation as entry point for secondary attacks |
Organizations relying on Apache MINA for critical services should treat this vulnerability with high priority.
How the Attack Works
Denial of Service (DoS) Attack Vector
The attack exploits the decompression process through a straightforward but effective mechanism:
Attack Sequence:
- Reconnaissance: Attacker identifies that the target application uses Apache MINA with compression enabled
- Payload Crafting: Attacker creates a specially compressed file with an extremely high compression ratio
- Transmission: Attacker sends the malicious compressed payload to the vulnerable application
- Decompression Trigger: The application’s CompressionFilter automatically decompresses the payload
- Memory Exhaustion: The decompressed data consumes available heap memory
- Service Failure: Application crashes with OutOfMemoryError or becomes unresponsive
Example Attack Payload:
A 10 MB compressed file could be crafted to decompress to 10 GB of data. When the application attempts to allocate this memory, it exceeds available resources.
Compressed Size: 10 MB
Decompressed Size: 10 GB
Compression Ratio: 1:1000
Resource Exhaustion Mechanism
The vulnerability operates through several resource exhaustion vectors:
Heap Memory Exhaustion:
- Decompressed data is allocated on the Java heap
- No limits prevent allocation of massive buffers
- Garbage collection cannot keep pace with allocation
- Application enters OutOfMemoryError state
CPU Resource Exhaustion:
- Decompression operations consume significant CPU cycles
- Multiple concurrent malicious payloads multiply the effect
- Garbage collection overhead increases as heap fills
- System becomes unresponsive to legitimate requests
Network Resource Exhaustion:
- Attacker can send multiple payloads simultaneously
- Each payload consumes bandwidth and processing capacity
- Connection pools become exhausted
- Legitimate users cannot establish connections
Real-World Exploitation Scenarios
Scenario 1: E-Commerce Platform Attack
Target: Online retailer using Apache MINA for order processing
Attack: Attacker sends 100 malicious compressed payloads per second
Result: Application crashes within 30 seconds
Impact: Order processing halted, $50K+ revenue loss per hour
Scenario 2: IoT Data Aggregation
Target: Smart building system collecting sensor data
Attack: Compromised sensor sends crafted compressed readings
Result: Central aggregation service runs out of memory
Impact: Building automation systems fail, security systems offline
Scenario 3: Real-Time Communication Platform
Target: Video conferencing application using compression
Attack: Attacker joins conference, sends malicious compressed stream
Result: Server memory exhausted, conference disconnected
Impact: 500+ users unable to communicate, productivity loss
Threat Assessment and Severity
CVSS Score and Rating Justification
Estimated CVSS v3.1 Score: 7.5 (High)
Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Component Breakdown:
| Component | Value | Rationale |
|---|---|---|
| Attack Vector (AV) | Network | Vulnerability is exploitable over the network |
| Attack Complexity (AC) | Low | No special conditions required; straightforward exploitation |
| Privileges Required (PR) | None | No authentication or special privileges needed |
| User Interaction (UI) | None | Attack is fully automated; no user action required |
| Scope (S) | Unchanged | Impact limited to the vulnerable component |
| Confidentiality (C) | None | No data disclosure occurs |
| Integrity (I) | None | No data modification occurs |
| Availability (A) | High | Complete service unavailability possible |
Severity Justification:
The High rating reflects:
- Ease of exploitation: Attackers require minimal technical skill
- Wide applicability: Any application using CompressionFilter is vulnerable
- Severe impact: Complete denial of service is achievable
- No mitigating factors: Vulnerability exists by default in affected versions
Business Impact: Availability and Downtime
Organizations face quantifiable business consequences from this vulnerability:
Downtime Costs (by organization size):
| Organization Type | Hourly Cost | 4-Hour Outage | 24-Hour Outage |
|---|---|---|---|
| Small Business (10-50 employees) | $5,000 | $20,000 | $120,000 |
| Mid-Market (100-500 employees) | $25,000 | $100,000 | $600,000 |
| Enterprise (1000+ employees) | $100,000+ | $400,000+ | $2,400,000+ |
Additional Costs:
- Incident response and forensics: $10,000-$50,000
- Emergency patching and deployment: $5,000-$25,000
- Customer notification and remediation: $20,000-$100,000
- Regulatory fines and compliance penalties: Variable by jurisdiction
Risk Level by Organization Type
Critical Risk (Immediate Action Required):
- SaaS platforms with public APIs
- Financial services and payment processors
- Healthcare systems handling patient data
- Critical infrastructure operators
- Real-time communication platforms
High Risk (Urgent Remediation Needed):
- E-commerce platforms
- Content delivery networks
- IoT platforms and smart systems
- Enterprise messaging systems
- Telecommunications providers
Moderate Risk (Timely Remediation Recommended):
- Internal enterprise applications
- Systems with network segmentation
- Applications with existing rate limiting
- Closed-loop systems with trusted endpoints
Lower Risk (Standard Remediation Timeline):
- Applications not using CompressionFilter
- Systems with strict input validation
- Isolated development/testing environments
Detection and Monitoring
Identifying Vulnerable Code in Your Environment

Step 1: Source Code Analysis
Search your codebase for CompressionFilter instantiation:
# Find all CompressionFilter references
grep -r "CompressionFilter" --include="*.java" .
# Find compression filter chain additions
grep -r "addLast.*Compression" --include="*.java" .
# Find ZLib usage patterns
grep -r "Zlib\|COMPRESSION" --include="*.java" .
Step 2: Dependency Verification
Check Maven Central and your artifact repository for Apache MINA versions:
# List all Apache MINA dependencies
mvn dependency:tree | grep mina
# Check specific version
mvn dependency:tree | grep "org.apache.mina:mina-core"
Step 3: Configuration Review
Examine configuration files for compression settings:
<!-- Check Spring configuration files -->
<bean id="compressionFilter" class="org.apache.mina.filter.compression.CompressionFilter">
<!-- Look for missing maxDecompressedSize configuration -->
</bean>
Step 4: Runtime Detection
Use Java reflection to identify active CompressionFilter instances:
// Runtime detection code
IoSession session = // ... get session
IoFilterChain chain = session.getFilterChain();
for (IoFilter filter : chain.getAll()) {
if (filter instanceof CompressionFilter) {
System.out.println("Found CompressionFilter: " + filter);
// Check configuration
}
}
Memory Usage Anomalies to Watch For
Establish baseline memory metrics and monitor for deviations:
Key Metrics to Monitor:
- Heap Memory Usage
- Baseline: Normal operating heap consumption
- Alert Threshold: 85% of maximum heap
- Critical Threshold: 95% of maximum heap
- Anomaly: Rapid increase without corresponding business activity
- Garbage Collection Frequency
- Baseline: GC pauses every 5-10 seconds (varies by application)
- Alert: GC frequency increases 3x above baseline
- Critical: Full GC occurring every 1-2 seconds
- Anomaly: GC unable to recover memory (heap doesn’t decrease)
- OutOfMemoryError Frequency
- Baseline: Zero occurrences in normal operation
- Alert: Any OutOfMemoryError in production
- Pattern: Multiple OOMEs within short timeframe indicates attack
- Connection/Request Patterns
- Baseline: Normal distribution of request sizes
- Anomaly: Sudden spike in small compressed payloads
- Anomaly: Requests with unusually high compression ratios
- Pattern: Requests from single source with varying payloads
Monitoring Configuration Example:
# JVM monitoring settings
-Xmx2g
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationStoppedTime
-Xloggc:gc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=100M
Tools and Techniques for Detection
1. Application Performance Monitoring (APM)
Deploy APM solutions to track memory patterns:
- New Relic: Memory usage dashboards, alert policies
- Datadog: Custom metrics for decompression operations
- Dynatrace: Automatic anomaly detection for memory spikes
- Elastic APM: Real-time monitoring with custom instrumentation
2. Static Code Analysis
Use static analysis tools to identify vulnerable patterns:
# SonarQube analysis
sonar-scanner \
-Dsonar.projectKey=myapp \
-Dsonar.sources=src \
-Dsonar.host.url=http://sonarqube:9000
# Checkmarx SAST scanning
checkmarx scan -s src/ -p "CVE-2026-47321"
# Semgrep rules for CompressionFilter
semgrep --config=p/security-audit src/
3. Dynamic Analysis and Testing
Create test payloads to verify vulnerability:
// Test payload generator
public class CompressionVulnerabilityTest {
public static void main(String[] args) throws Exception {
// Create highly compressible data
byte[] testData = new byte[1_000_000];
Arrays.fill(testData, (byte) 'A'); // Highly compressible
// Compress the data
byte[] compressed = compress(testData);
System.out.println("Original: " + testData.length +
" bytes, Compressed: " + compressed.length +
" bytes, Ratio: " +
(testData.length / (double) compressed.length));
// Send to vulnerable application and monitor memory
}
}
4. Log Analysis
Monitor application logs for indicators:
# Search for decompression errors
grep -i "decompression\|inflate\|zlib" application.log
# Search for memory-related errors
grep -i "OutOfMemory\|MemoryError\|heap" application.log
# Search for compression filter initialization
grep -i "CompressionFilter\|compression.*enabled" application.log
5. Network Traffic Analysis
Use packet analysis to identify suspicious compression patterns:
# Capture traffic with tcpdump
tcpdump -i eth0 -w capture.pcap 'tcp port 8080'
# Analyze with Wireshark
wireshark capture.pcap
# Look for patterns:
# - Small packet size with high compression ratio
# - Repeated similar payloads from single source
# - Payloads that decompress to unusually large sizes
Step-by-Step Remediation
Upgrading Apache MINA to Patched Versions
Step 1: Identify Current Version
# Check Maven pom.xml
cat pom.xml | grep -A 2 "mina-core"
# Check Gradle build.gradle
cat build.gradle | grep mina
# Check running application
jps -l | grep java
jcmd <pid> VM.system_properties | grep mina
Step 2: Determine Target Version
Consult the Apache MINA security advisory for patched versions:
Vulnerable: All versions before CVE-2026-47321 patch
Patched: Apache MINA 2.2.3 and later (example version)
Recommended: Latest stable release (2.2.5 or later)
Step 3: Update Dependency
For Maven projects:
<!-- pom.xml -->
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.2.5</version> <!-- Updated version -->
</dependency>
For Gradle projects:
// build.gradle
dependencies {
implementation 'org.apache.mina:mina-core:2.2.5'
}
Step 4: Verify Dependency Resolution
# Maven
mvn dependency:tree | grep mina-core
# Gradle
gradle dependencies | grep mina-core
Step 5: Rebuild Application
# Maven
mvn clean package
# Gradle
gradle clean build
Step 6: Test in Staging Environment
Deploy to staging and run comprehensive tests:
# Run unit tests
mvn test
# Run integration tests
mvn verify
# Run security tests
mvn org.owasp:dependency-check-maven:check
Step 7: Deploy to Production
Follow your organization’s change management process:
# Blue-green deployment example
# 1. Deploy new version to green environment
# 2. Run smoke tests
# 3. Switch traffic from blue to green
# 4. Monitor for issues
# 5. Keep blue environment for rollback
Configuring CompressionFilter with Size Limits
After upgrading, configure the CompressionFilter with appropriate security parameters.
Configuration Method 1: Programmatic Configuration
import org.apache.mina.filter.compression.CompressionFilter;
import org.apache.mina.core.filterchain.IoFilterChain;
public class CompressionFilterConfiguration {
public static CompressionFilter createSecureCompressionFilter() {
CompressionFilter compressionFilter = new CompressionFilter();
// Set maximum decompressed size (1 MB)
compressionFilter.setMaxDecompressedSize(1_000_000);
// Set maximum decompression ratio (100:1)
compressionFilter.setMaxDecompressRatio(100);
// Set minimum size for decompression ratio check (100 KB)
compressionFilter.setDecompressRatioMinSize(100_000);
// Set compression level
compressionFilter.setCompressionLevel(6); // 1-9, 6 is default
return compressionFilter;
}
public static void addCompressionFilter(IoFilterChain chain) {
chain.addLast("compressionFilter", createSecureCompressionFilter());
}
}
Configuration Method 2: Spring Framework
<!-- applicationContext.xml -->
<bean id="compressionFilter"
class="org.apache.mina.filter.compression.CompressionFilter">
<property name="maxDecompressedSize" value="1000000"/>
<property name="maxDecompressRatio" value="100"/>
<property name="decompressRatioMinSize" value="100000"/>
<property name="compressionLevel" value="6"/>
</bean>
<bean id="ioAcceptor"
class="org.apache.mina.transport.socket.nio.NioSocketAcceptor">
<property name="filterChainBuilder">
<bean class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
<property name="filters">
<map>
<entry key="compressionFilter" value-ref="compressionFilter"/>
</map>
</property>
</bean>
</property>
</bean>
Configuration Method 3: Properties File
# compression.properties
compression.enabled=true
compression.maxDecompressedSize=1000000
compression.maxDecompressRatio=100
compression.decompressRatioMinSize=100000
compression.level=6
Configuration Parameters Explained:
| Parameter | Value | Purpose |
|---|---|---|
maxDecompressedSize |
1,000,000 bytes | Prevents individual payloads from exceeding 1 MB |
maxDecompressRatio |
100 | Prevents compression ratios exceeding 100:1 |
decompressRatioMinSize |
100,000 bytes | Only applies ratio check to payloads > 100 KB |
compressionLevel |
6 | Balanced compression (1=fast, 9=best compression) |
Code Review and Compliance Checklist
Pre-Deployment Review Checklist:
- [ ] Apache MINA upgraded to patched version (2.2.3+)
- [ ] CompressionFilter instantiation includes size limit configuration
- [ ]
maxDecompressedSizeset to appropriate value for your use case - [ ]
maxDecompressRatioconfigured to prevent suspicious compression patterns - [ ] All CompressionFilter instances reviewed for compliance
- [ ] Configuration parameters documented in code comments
- [ ] Unit tests created for compression filter behavior
- [ ] Integration tests verify size limit enforcement
- [ ] Load tests confirm no performance degradation
- [ ] Security review completed and approved
- [ ] Change management process followed
- [ ] Rollback plan documented and tested
- [ ] Monitoring and alerting configured
- [ ] Incident response procedures updated
Code Review Template:
// SECURE IMPLEMENTATION EXAMPLE
public class SecureCompressionSetup {
/**
* Creates a CompressionFilter with security hardening.
*
* CVE-2026-47321 Mitigation:
* - maxDecompressedSize: Prevents memory exhaustion from large payloads
* - maxDecompressRatio: Detects suspicious compression patterns
* - decompressRatioMinSize: Avoids false positives on small payloads
*
* @return Configured CompressionFilter instance
*/
public CompressionFilter createCompressionFilter() {
CompressionFilter filter = new CompressionFilter();
// CVE-2026-47321: Set maximum decompressed size
// Adjust based on your application's legitimate payload sizes
filter.setMaxDecompressedSize(1_000_000); // 1 MB
// CVE-2026-47321: Set maximum decompression ratio
// Typical legitimate compression ratios: 2-10
// Suspicious ratios: > 100
filter.setMaxDecompressRatio(100);
// CVE-2026-47321: Set minimum size for ratio enforcement
// Avoids false positives on small payloads
filter.setDecompressRatioMinSize(100_000); // 100 KB
return filter;
}
}
Implementation Best Practices
Recommended Configuration Parameters
Selecting appropriate configuration values requires balancing security and functionality.
Configuration Profiles by Use Case:
Profile 1: Strict Security (Recommended for Public APIs)
compressionFilter.setMaxDecompressedSize(500_000); // 500 KB
compressionFilter.setMaxDecompressRatio(50); // 50:1
compressionFilter.setDecompressRatioMinSize(50_000); // 50 KB
Profile 2: Balanced (Recommended for Internal Systems)
compressionFilter.setMaxDecompressedSize(5_000_000); // 5 MB
compressionFilter.setMaxDecompressRatio(100); // 100:1
compressionFilter.setDecompressRatioMinSize(100_000); // 100 KB
Profile 3: Permissive (Only for Trusted Environments)
compressionFilter.setMaxDecompressedSize(50_000_000); // 50 MB
compressionFilter.setMaxDecompressRatio(500); // 500:1
compressionFilter.setDecompressRatioMinSize(1_000_000); // 1 MB
Determining Your Configuration:
- Analyze legitimate payload sizes:
# Review application logs for typical payload sizes
grep "payload size" application.log | \
awk '{print $NF}' | sort -n | tail -20
- Measure compression ratios:
// Calculate compression ratio for typical payloads
byte[] original = loadTypicalPayload();
byte[] compressed = compress(original);
double ratio = original.length / (double) compressed.length;
System.out.println("Compression ratio: " + ratio);
- Set limits above legitimate maximums:
Max Decompressed Size = (Largest legitimate payload) × 1.5
Max Decompression Ratio = (Highest legitimate ratio) × 2
- Document your choices:
/**
* Configuration rationale:
* - maxDecompressedSize: 5MB (largest legitimate payload is 3MB)
* - maxDecompressRatio: 100 (typical ratio is 5-10)
* - decompressRatioMinSize: 100KB (avoids false positives)
*/
Setting Maximum Decompressed Size
The maxDecompressedSize parameter is the primary defense against memory exhaustion.
Calculation Method:
maxDecompressedSize = (Largest legitimate payload) × Safety margin (1.5-2.0)
Examples by Application Type:
| Application Type | Typical Payload | Max Size Setting |
|---|---|---|
| REST API | 100 KB | 500 KB |
| File Upload | 10 MB | 20 MB |
| Real-time Chat | 10 KB | 50 KB |
| IoT Sensor Data | 1 KB | 10 KB |
| Video Streaming | 100 MB | 200 MB |
Implementation:
public class PayloadSizeConfiguration {
// REST API configuration
public static final int REST_API_MAX_SIZE = 500_000; // 500 KB
// File upload configuration
public static final int FILE_UPLOAD_MAX_SIZE = 20_000_000; // 20 MB
// Real-time communication
public static final int REALTIME_MAX_SIZE = 50_000; // 50 KB
public static CompressionFilter configureForRestApi() {
CompressionFilter filter = new CompressionFilter();
filter.setMaxDecompressedSize(REST_API_MAX_SIZE);
return filter;
}
}
Balancing Security and Performance
Overly restrictive settings can impact legitimate functionality, while permissive settings reduce security.
Performance Considerations:
- Compression Level Impact:
Level 1: Fastest compression, largest output
Level 6: Default, balanced
Level 9: Slowest compression, smallest output
- Memory Usage:
Higher maxDecompressedSize = More memory required
Stricter maxDecompressRatio = More CPU for validation
- Throughput Impact:
Strict limits: May reject legitimate large payloads
Permissive limits: Reduced protection against attacks
Optimization Strategy:
public class OptimizedCompressionConfiguration {
public static CompressionFilter createOptimizedFilter(
int maxPayloadSize,
int maxRatio) {
CompressionFilter filter = new CompressionFilter();
// Set size limit based on actual requirements
filter.setMaxDecompressedSize(maxPayloadSize);
// Set ratio limit based on typical compression patterns
filter.setMaxDecompressRatio(maxRatio);
// Minimum size threshold to avoid false positives
filter.setDecompressRatioMinSize(maxPayloadSize / 10);
// Compression level: balance speed and compression
filter.setCompressionLevel(6); // Default balanced level
return filter;
}
}
Testing Performance:
# Load test with compression
jmeter -n -t compression_test.jmx \
-l results.jtl \
-j jmeter.log \
-Jthreads=100 \
-Jrampup=60 \
-Jduration=300
Verification and Testing
How to Confirm Your Fix is Working
Step 1: Verify Patched Version
# Check deployed version
curl http://localhost:8080/api/version
# Check JAR manifest
jar tf mina-core-2.2.5.jar | grep MANIFEST
unzip -p mina-core-2.2.5.jar META-INF/MANIFEST.MF | grep Implementation-Version
# Check running process
jcmd <pid> VM.system_properties | grep mina
Step 2: Verify Configuration
// Runtime configuration verification
public class ConfigurationVerification {
public static void verifyCompressionFilterConfiguration(
CompressionFilter filter) {
// Use reflection to check configuration
try {
Field maxSizeField = CompressionFilter.class
.getDeclaredField("maxDecompressedSize");
maxSizeField.setAccessible(true);
int maxSize = (int) maxSizeField.get(filter);
System.out.println("Max Decompressed Size: " + maxSize);
assert maxSize > 0 : "maxDecompressedSize not configured";
// Verify other settings similarly
} catch (Exception e) {
System.err.println("Configuration verification failed: " + e);
}
}
}
Step 3: Test with Legitimate Payloads
public class LegitimatePayloadTest {
@Test
public void testLegitimateCompressedPayload() throws Exception {
// Create legitimate payload
byte[] originalData = "Hello, World!".getBytes();
byte[] compressedData = compress(originalData);
// Send through vulnerable filter
CompressionFilter filter = createSecureCompressionFilter();
// Should process successfully
byte[] decompressed = filter.decompress(compressedData);
assertArrayEquals(originalData, decompressed);
}
}
Testing Decompression Limits
Test 1: Size Limit Enforcement
@Test(expected = CompressionException.class)
public void testMaxDecompressedSizeEnforcement() throws Exception {
CompressionFilter filter = new CompressionFilter();
filter.setMaxDecompressedSize(1_000_000); // 1 MB limit
// Create payload that decompresses to 10 MB
byte[] maliciousPayload = createMaliciousPayload(10_000_000);
// Should throw exception
filter.decompress(maliciousPayload);
}
private byte[] createMaliciousPayload(int decompressedSize)
throws Exception {
// Create highly compressible data
byte[] data = new byte[decompressedSize];
Arrays.fill(data, (byte) 'A');
return compress(data);
}
Test 2: Decompression Ratio Enforcement
“`java
@Test(expected