Skip to content

Malicious package may avoid detection in python auditing

Moderate severity GitHub Reviewed Published Mar 20, 2020 in pyupio/safety • Updated Jan 9, 2023

Package

pip safety (pip)

Affected versions

< 1.9.0

Patched versions

1.9.0

Description

Python Auditing Vulnerability

Demonstrates how a malicious package can insert a load-time poison pill to avoid detection by tools like Safety.

Tools that are designed to find vulnerable packages can not ever run in the same python environment that they are trying to protect.

Usage

Install safety, insecure-package, and this package with pip in the same python environment. Order doesn&#39;t matter.

  1. pip install safety
  2. pip install insecure-package
  3. pip install dist/malicious-0.1-py3-none-any.whl

Run the check

  1. safety check

You should see both Running my modified safety.check and that insecure-package is not listed in the results!

How it Works

Everything in Python is mutable. The trick is getting some code to run at interpreter load time in order to do some patching.

  1. When you install this package, the setup.py settings installs a malicious.pth file to your site-packages directory.
  2. The malicious.pth file gets loaded anytime Python starts, which in turn imports our malicious package.
  3. The malicious/__init__.py patches the safety library with a custom function to avoid detection.

References

@harlekeyn harlekeyn published to pyupio/safety Mar 20, 2020
Reviewed Mar 23, 2020
Published to the GitHub Advisory Database Mar 24, 2020
Last updated Jan 9, 2023

Severity

Moderate
5.0
/ 10

CVSS base metrics

Attack vector
Local
Attack complexity
High
Privileges required
High
User interaction
Required
Scope
Changed
Confidentiality
None
Integrity
High
Availability
None
CVSS:3.1/AV:L/AC:H/PR:H/UI:R/S:C/C:N/I:H/A:N

Weaknesses

CVE ID

CVE-2020-5252

GHSA ID

GHSA-7q25-qrjw-6fg2

Source code

Credits

Checking history
See something to contribute? Suggest improvements for this vulnerability.