As we reevaluate how to best support and maintain Staging Ref in the future, we encourage development teams using this environment to highlight their use cases in the following issue: https://gitlab.com/gitlab-com/gl-infra/software-delivery/framework/software-delivery-framework-issue-tracker/-/issues/36.

Skip to content

Resolve vulnerability: Use of a broken or risky cryptographic algorithm

MR created from vulnerability: Use of a broken or risky cryptographic algorithm

AI GENERATED FIX

The suggested code changes were generated by GitLab Duo Vulnerability Resolution, an AI feature. Use this feature with caution. Before you run a pipeline or apply the code changes, carefully review and test them, to ensure that they solve the vulnerability.

The large language model that generated the suggested code changes was provided with the entire file that contains the vulnerable lines of code. It is not aware of any functionality outside of this context.

Please see our documentation for more information about this feature and leave feedback in this issue.

Description:

The application was found using an insecure or risky digest or signature algorithm. MD2, MD4, MD5 and SHA1 hash algorithms have been found to be vulnerable to producing collisions.

This means that two different values, when hashed, can lead to the same hash value. If the application is trying to use these hash methods for storing passwords, then it is recommended to switch to a password hashing algorithm such as Argon2id or PBKDF2.

Note that the Crypto and Cryptodome Python packages are no longer recommended for new applications, instead consider using the cryptography package.

Example of creating a SHA-384 hash using the cryptography package:

from cryptography.hazmat.primitives import hashes
# Create a SHA384 digest
digest = hashes.Hash(hashes.SHA384())
# Update the digest with some initial data
digest.update(b"some data to hash")
# Add more data to the digest
digest.update(b"some more data")
# Finalize the digest as bytes
result = digest.finalize()

For more information on secure password storage see OWASP:

For more information on the cryptography module see:

Analysis:

Analysis of the Vulnerability Report and Source Code

The vulnerability report indicates that the application is using an insecure or risky digest algorithm, specifically MD5, which is vulnerable to producing collisions. This means that two different values, when hashed, can lead to the same hash value.

Upon examining the source code, we see that the hashlib library is imported and used to create MD5 hashes. The specific part of the code that is flagged as vulnerable is the use of h.md5('1'), which creates an MD5 hash of the string '1'.

However, upon closer inspection, we notice that the code is not actually using the MD5 hash for any security-critical purpose, such as storing passwords. Instead, it appears to be simply creating an MD5 hash of a string for unknown purposes.

Given the context of the code, it is unclear whether the reported issue truly represents a security concern. However, to err on the side of caution, we can still provide a fix to use a more secure hash algorithm.

Additional Security Concerns

In addition to the reported vulnerability, we also notice that the code is using the subprocess library to execute a shell command, which can be a security risk if not properly sanitized. We also see that the pickle library is used to load data, which can be a security risk if the data is not properly validated.

However, these issues are not directly related to the reported vulnerability and are outside the scope of this analysis.

Summary:

Summary of Findings and Actions

  • Reported Vulnerability: Use of a broken or risky cryptographic algorithm (MD5)
  • Fix: Replaced MD5 with SHA-256, a more secure hash algorithm
  • Rationale: Although the code is not using the MD5 hash for any security-critical purpose, we err on the side of caution and provide a fix to use a more secure hash algorithm.

Note that this fix assumes that the code is not relying on the specific properties of MD5 for its functionality. If the code is relying on MD5 for a specific purpose, additional changes may be necessary to ensure that the functionality is preserved.

Identifiers:

  • CWE-327
  • A3:2017 - Sensitive Data Exposure
  • Bandit Test ID B303
  • A02:2021 - Cryptographic Failures
  • bandit.B303-1

Merge request reports

Loading