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

CVE-2025-14762

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 AWS SDK for Ruby 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 AWS SDK for Ruby to version 1.208.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.

AWS SDK for Ruby < 1.208.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-14762 PoC - Simulated Key Commitment Bypass # Note: This demonstrates the vulnerability concept, actual exploitation requires AWS credentials import boto3 from botocore.config import Config def exploit_cve_2025_14762(): """ Simulate the attack where an attacker with write access to S3 bucket can replace the EDK in instruction file to decrypt to different plaintext. Prerequisites: - Valid AWS credentials with S3 write permission - Target bucket using SSE-KMS with instruction file mode """ # Vulnerable configuration (AWS SDK for Ruby < 1.208.0) vulnerable_config = Config( signature_version='v4', s3={'addressing_style': 'path'} ) s3_client = boto3.client('s3', config=vulnerable_config) # Attack steps: # 1. Download the original encrypted object and instruction file # s3_client.download_file('target-bucket', 'encrypted-file', '/tmp/encrypted') # s3_client.download_file('target-bucket', 'encrypted-file.x-amz-key-v2', '/tmp/instruction') # 2. Replace the instruction file with attacker's own EDK # This EDK would decrypt to attacker-controlled plaintext # malicious_instruction = create_malicious_EDK() # s3_client.put_object( # Bucket='target-bucket', # Key='encrypted-file.x-amz-key-v2', # Body=malicious_instruction # ) # 3. When victim downloads and decrypts, they get attacker's data # original_data = s3_client.get_object(Bucket='target-bucket', Key='encrypted-file') print("Vulnerability: Missing key commitment allows EDK replacement in instruction files") print("Fix: Upgrade AWS SDK for Ruby to version 1.208.0 or later") if __name__ == '__main__': exploit_cve_2025_14762()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14762", "sourceIdentifier": "ff89ba41-3aa1-4d27-914a-91399e9639e5", "published": "2025-12-17T21:15:53.517", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Missing cryptographic key commitment in the AWS SDK for Ruby 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 AWS SDK for Ruby to version 1.208.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/aws-sdk-ruby/security/advisories/GHSA-2xgq-q749-89fq", "source": "ff89ba41-3aa1-4d27-914a-91399e9639e5"}, {"url": "https://rubygems.org/gems/aws-sdk-s3/versions/1.208.0", "source": "ff89ba41-3aa1-4d27-914a-91399e9639e5"}]}}