Skip to main content

Fast Python Vulnerability Scanner

Use the GitLab Advisory Database to do Python Vulnerability Scanning.

This looks quite similar to what Gitlab's Gemnasium Dependency Scanning Analyzer does, but comes with some differences:

  • No Docker container is included in this project. Bring your own or work locally.
  • Results are printed on stdout, and are directly readable.
  • Works on a directory of already vendored wheels rather than doing pip install -r requirements.txt in some half-baked attempt to determine the results of such a call.

Why a single command, rather than a full blown Docker container?

  1. You should generally ask the opposite question. Now get off my lawn.
  2. Ability to trivially run from your local development environment.
  3. No working around the limitations of missing header files when trying to get pip install some-package-without-wheel-but-with-c-bindings to work.
  4. Fast: just reuse already-vendored packages (from some cache or artifact) rather than doing yet another pip install -r requirements.txt in each job of your pipeline.

usage: fpvs-scan [-h] [--wheels-path WHEELS_PATH] [--gemnasium-db-path GEMNASIUM_DB_PATH] [--version] [--verbose]

Example usage:

# 1. install the wheels to be scanned
pip install wheel
pip wheel requests==2.0.1 --wheel-dir=vendor  # this is a bad package on purpose, to show off what FPVS does

# 2. get fpvs, the vulnerability database and do the scanning:
pip install fpvs
git clone git@gitlab.com:gitlab-org/security-products/gemnasium-db.git
fpvs-scan --verbose

In typical real-world usage, part 1 of the example above would already be executed in some other part of your pipeline or development flow, and would have become an artifact / just live on your machine. This is what makes FPVS fast: it doesn't do slow stuff that you did already.

Example output:

fpvs-scan  --verbose
Checking wheels in vendor against gemnasium-db
SCANNING requests-2.0.1-py2.py3-none-any.whl
ADVISORY pypi/requests/CVE-2014-1829.yml: 2.0.1 against <=2.2.1 FAIL
ADVISORY pypi/requests/CVE-2013-2099.yml: 2.0.1 against <=1.0.3 OK
ADVISORY pypi/requests/CVE-2018-18074.yml: 2.0.1 against <2.20.0 FAIL
ADVISORY pypi/requests/GMS-2012-3.yml: 2.0.1 against <0.12.0 OK
ADVISORY pypi/requests/CVE-2014-1830.yml: 2.0.1 against <=2.2.1 FAIL
ADVISORY pypi/requests/CVE-2015-2296.yml: 2.0.1 against <2.6.0 FAIL

pypi/requests
Information Exposure
Requests (aka python-requests) allows remote servers to obtain a netrc password by reading the Authorization header in a redirected request.
CVE-2014-1829
Upgrade to version 2.3.0 or above.

pypi/requests
Information exposure in HTTP headers
The Requests package for Python sends an HTTP Authorization header to an HTTP URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.
CVE-2018-18074
Upgrade to version 2.20.0 or above.

pypi/requests
Information Exposure
Requests (aka python-requests) allows remote servers to obtain sensitive information by reading the Proxy-Authorization header in a redirected request.
CVE-2014-1830
Upgrade to version 2.3.0 or above.

pypi/requests
Session fixation in resolve_redirects()
The `resolve_redirects()` function in `sessions.py` allows a remote, user-assisted attacker to conduct a session fixation attack. This flaw exists because the application, when establishing a new session, does not invalidate an existing session identifier and assign a new one. With a specially crafted request fixating the session identifier, a context-dependent attacker can ensure a user authenticates with the known session identifier, allowing the session to be subsequently hijacked.
CVE-2015-2296
Upgrade to version 2.6.0 or above.

FAILURE: Found 4 advisories

Note that the GitLab Advisory Database has a licence that is separate from the FPVS.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fpvs-0.2.0.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fpvs-0.2.0-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file fpvs-0.2.0.tar.gz.

File metadata

  • Download URL: fpvs-0.2.0.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.7

File hashes

Hashes for fpvs-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1e96349102b4d7c46bb8e390a7a0f09636528a9fd90f05c6f813570f10a422e0
MD5 1a26b0c4d4a66ff6f9dccd9825097c93
BLAKE2b-256 f6203d5c62d0525026df06cb71178613247f91a98443fcbc55a6a02cff4d352b

See more details on using hashes here.

File details

Details for the file fpvs-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: fpvs-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.7

File hashes

Hashes for fpvs-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b164c4a6b0ee1c5eb516910a74a63b4fb6d0432829379811cb43accdc97747a1
MD5 ac57a3bf65184c2e2d0dc8c9a313b713
BLAKE2b-256 3785729ae46488209fb6cbee863f4636c7d520d36ab2da1a33b8757eba946f79

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

2 files

This release

0.2.0 This release

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page