Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2020-25658

CVE-2020-25658: Python-rsa Timing Attack Vulnerability

CVE-2020-25658 is a Bleichenbacher timing attack flaw in Python-rsa that enables attackers to decrypt RSA-encrypted cipher text. This article covers technical details, affected versions, security impact, and mitigation.

Published:

CVE-2020-25658 Overview

CVE-2020-25658 is a timing attack vulnerability discovered in the python-rsa library. The flaw exposes the RSA decryption API to Bleichenbacher timing attacks, allowing attackers to decrypt portions of cipher text encrypted with RSA by analyzing timing variations during decryption operations.

Critical Impact

Attackers can exploit timing side-channels in the RSA decryption process to recover encrypted data, potentially compromising confidential communications and encrypted secrets in applications using the vulnerable python-rsa library.

Affected Products

  • python-rsa (all versions prior to fix)
  • Red Hat OpenStack Platform 13.0 and 16.0
  • Fedora 33, 34, and 35

Discovery Timeline

  • 2020-11-12 - CVE-2020-25658 published to NVD
  • 2024-11-21 - Last updated in NVD database

Technical Details for CVE-2020-25658

Vulnerability Analysis

This vulnerability is a classic Bleichenbacher timing attack (also known as a "million message attack") affecting the python-rsa cryptographic library. The weakness stems from non-constant-time operations in the RSA decryption implementation, which leak information through observable timing differences.

When the python-rsa library processes PKCS#1 v1.5 padded ciphertext during decryption, the execution time varies depending on the padding validity and content of the decrypted message. An attacker with network access can submit specially crafted ciphertexts and measure the response times to gradually recover the plaintext of previously encrypted messages.

The vulnerability is classified under CWE-385 (Covert Timing Channel) and CWE-327 (Use of a Broken or Risky Cryptographic Algorithm), highlighting both the timing side-channel issue and the broader cryptographic implementation concerns.

Root Cause

The root cause of this vulnerability lies in the non-constant-time implementation of the RSA decryption routine in python-rsa. During PKCS#1 v1.5 padding validation, the library's execution path differs based on whether the padding is valid or invalid, and how the padding bytes are structured. These conditional branches create measurable timing variations that leak information about the decrypted content.

Specifically, the decryption function does not use constant-time comparison operations for padding validation, nor does it normalize the execution time regardless of padding validity. This allows attackers to distinguish between different decryption outcomes by analyzing response latencies.

Attack Vector

The attack is network-based and requires no authentication or user interaction. An attacker can exploit this vulnerability by:

  1. Intercepting RSA-encrypted ciphertext from network communications
  2. Submitting modified versions of the ciphertext to a service using the vulnerable python-rsa library
  3. Measuring the precise response times for each decryption attempt
  4. Using statistical analysis of timing variations to progressively recover the original plaintext

The attack complexity is high because it requires collecting many timing samples and performing sophisticated statistical analysis. However, with sufficient network access and patience, an attacker can successfully decrypt portions of RSA-encrypted communications.

The vulnerability mechanism exploits timing variations in padding validation during RSA decryption. When the PKCS#1 v1.5 padding is checked, conditional branches in the code create observable timing differences. An attacker submits crafted ciphertexts and measures response times to distinguish valid from invalid padding, gradually recovering the encrypted plaintext. For technical implementation details, refer to the GitHub Issue #165.

Detection Methods for CVE-2020-25658

Indicators of Compromise

  • Unusually high volume of failed RSA decryption operations from a single source
  • Patterns of decryption requests with systematically modified ciphertext values
  • Network traffic showing repeated connections with precise timing intervals to services using python-rsa

Detection Strategies

  • Monitor application logs for excessive RSA decryption failures or errors from specific IP addresses
  • Implement request rate limiting on APIs that perform RSA decryption operations
  • Use network intrusion detection systems to identify timing attack patterns characterized by regular-interval requests
  • Audit installed Python packages to identify vulnerable python-rsa versions using pip list or dependency scanning tools

Monitoring Recommendations

  • Enable detailed logging for cryptographic operations to capture decryption request patterns
  • Set up alerting for anomalous traffic volumes targeting RSA decryption endpoints
  • Conduct periodic dependency audits to ensure python-rsa and related cryptographic libraries are up to date

How to Mitigate CVE-2020-25658

Immediate Actions Required

  • Upgrade python-rsa to the latest patched version immediately
  • Audit all applications and services for python-rsa dependency usage
  • Consider migrating to alternative RSA implementations that use constant-time operations, such as cryptography library
  • Review network exposure of services performing RSA decryption and restrict access where possible

Patch Information

Users should update the python-rsa library to a version that includes the fix for this timing vulnerability. Check the Red Hat Bug Report and Fedora Package Announcements for distribution-specific patching guidance. For Red Hat OpenStack Platform users, consult Red Hat's security advisories for updated packages.

Workarounds

  • Replace python-rsa with the cryptography library which implements RSA using constant-time operations
  • Avoid using PKCS#1 v1.5 padding for new implementations; prefer OAEP (Optimal Asymmetric Encryption Padding) where possible
  • Implement network-level rate limiting to slow down potential timing attack attempts
  • Restrict network access to RSA decryption services using firewalls or access control lists
bash
# Upgrade python-rsa to latest version
pip install --upgrade rsa

# Check current installed version
pip show rsa

# Alternative: Install cryptography library as replacement
pip install cryptography

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.