CVE-2020-8911
Medium · 5.6CVSS
5.6
EPSS
0.3%
Published
Aug 11, 2020
CISA due date
—
Cloudanix analysis
An older encryption tool for cloud storage files can let someone who is allowed to change those files figure out the secret contents by watching how the system reacts to slightly altered data.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- High
- Impact
- Data Exposure
- Component
- Library
- Class
- Cryptographic Weakness
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
The vulnerability is a padding oracle in AES-CBC encryption performed without a MAC, allowing an attacker who can modify ciphertexts in S3 and observe decryption outcomes to recover plaintext byte-by-byte via repeated adaptive queries that trigger PKCS5 padding errors.
Why it matters to the business
Attackers with S3 write access can recover sensitive plaintext from encrypted objects without possessing the key, exposing confidential data to unauthorized disclosure if any service performs decryption of attacker-controlled objects.
How an attack unfolds
An attacker writes a modified ciphertext to the target S3 bucket, triggers decryption through an endpoint that uses the vulnerable SDK, and uses the presence or absence of padding errors to deduce successive plaintext bytes, requiring on average 128 queries per byte.
How to fix it
Upgrade the AWS S3 Crypto SDK for Go to version 2 or later and re-encrypt all previously encrypted objects using the updated SDK that enforces authenticated encryption.
How to confirm the fix worked
Confirm the installed SDK version is 2 or newer, review source code and build artifacts for use of the legacy s3crypto package, and verify that re-encrypted objects include proper message authentication.
Typical attack path
- Gain write access to the target S3 bucket
- Locate an endpoint or service that decrypts objects from that bucket using the vulnerable SDK
- Upload crafted ciphertexts that manipulate CBC blocks
- Observe padding oracle responses across many decryption attempts
- Reconstruct the full original plaintext
How to detect it
Examine S3 access logs and application logs for sequences of PutObject followed by repeated GetObject or decryption calls on the same objects; look for high volumes of decryption requests originating from untrusted sources or unusual patterns consistent with adaptive oracle queries.
What your security team should do
- Upgrade all Go applications using the S3 Crypto SDK to version 2 immediately
- Re-encrypt every object that was encrypted with the vulnerable library
- Audit all encryption usage for absence of MAC or authenticated encryption modes
- Restrict S3 write permissions to the minimum necessary principals
- Monitor decryption endpoints for anomalous query volumes against the same objects
The record
A padding oracle vulnerability exists in the AWS S3 Crypto SDK for GoLang versions prior to V2. The SDK allows users to encrypt files with AES-CBC without computing a Message Authentication Code (MAC), which then allows an attacker who has write access to the target's S3 bucket and can observe whether or not an endpoint with access to the key can decrypt a file, they can reconstruct the plaintext with (on average) 128*length (plaintext) queries to the endpoint, by exploiting CBC's ability to manipulate the bytes of the next block and PKCS5 padding errors. It is recommended to update your SDK to V2 or later, and re-encrypt your files.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/aws/aws-sdk-go | 0 | 1.34.0 |
| Go | github.com/aws/aws-sdk-go | 0 | No fix |
| Chainguard | grafana-10.1 | 0 | 0 |
| Chainguard | k3d | 0 | 5.6.0-r11 |
| Chainguard | k3d-proxy | 0 | 5.6.0-r11 |
| Chainguard | k3d-tools | 0 | 5.6.0-r11 |
| Chainguard | kubevirt-cdi-uploadserver-1.5 | 0 | 0 |
| Chainguard | kubevirt-cdi-uploadserver-1.59 | 0 | 0 |
| Chainguard | kubevirt-cdi-uploadserver-fips-1.5 | 0 | 0 |
| Chainguard | kubevirt-cdi-uploadserver-fips-1.59 | 0 | 0 |
| Wolfi | k3d | 0 | 5.6.0-r11 |
| Wolfi | k3d-proxy | 0 | 5.6.0-r11 |
| Wolfi | k3d-tools | 0 | 5.6.0-r11 |
| openSUSE:Tumbleweed | govulncheck-vulndb | 0 | 0.0.20241119T173509-1.1 |
Related vulnerabilities
- CVE-2022-2582 The AWS S3 Crypto SDK sends an unencrypted hash of the plaintext alongside the ciphertext… Also affects github.com/aws/aws-sdk-go
- CVE-2020-8912 A vulnerability in the in-band key negotiation exists in the AWS S3 Crypto SDK for GoLang… Also affects github.com/aws/aws-sdk-go
- CVE-2023-6152 A user changing their email after signing up and verifying it can change it without… Also affects grafana-10.1
- CVE-2023-49568 A denial of service (DoS) vulnerability was discovered in go-git versions prior to v5.11. Also affects grafana-10.1
- CVE-2023-4822 Grafana is an open-source platform for monitoring and observability. Also affects grafana-10.1
- CVE-2025-15558 Docker CLI for Windows searches for plugin binaries in C:\ProgramData\Docker\cli-plugins… Also affects k3d
- CVE-2024-2660 Vault and Vault Enterprise TLS certificates auth method did not correctly validate OCSP… Also affects k3d
- CVE-2024-2048 Vault and Vault Enterprise (“Vault”) TLS certificate auth method did not correctly… Also affects k3d