Automatically detect software supply chain smells and issues
Project description
dirty-waters
Dirty-waters automatically finds software supply chain issues in software projects by analyzing the available metadata of all dependencies, transitively.
Reference: Dirty-Waters: Detecting Software Supply Chain Smells, Technical report 2410.16049, arXiv, 2024.
By using dirty-waters, you identify the shady areas of your supply chain, which would be natural target for attackers to exploit.
Kinds of problems identified by dirty-waters
- Dependencies with no link to source code repositories (high severity)
- Dependencies with no tag / commit sha for release, impossible to have reproducible builds (high severity)
- Deprecated Dependencies (medium severity)
- Depends on a fork (medium severity)
- Dependencies with no build attestation (low severity)
Additionally, dirty-waters gives a supplier view on the dependency trees (who owns the different dependencies?)
dirty-waters is developed as part of the Chains research project.
NPM Support
Installation
To set up the Dirty-Waters, follow these steps:
- Clone the repository:
git clone https://github.com/chains-project/dirty-waters.git
cd dirty-waters
- Set up a virtual environment and install dependencies:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cd tool
In alternative, you may also use the Nix flake present in this repository.
- Set up the GitHub API token (ideally, in a
.env
file):
export GITHUB_API_TOKEN=<your_token>
Usage
Run the tool using the following command structure:
python main.py -p <project_repo_name> -v <release_version_old> -s -pm <package_manager> [-vn <release_version_new>] [-d]
Arguments:
usage: main.py [-h] -p PROJECT_REPO_NAME -v RELEASE_VERSION_OLD [-vn RELEASE_VERSION_NEW] -s [-d] -pm
{yarn-classic,yarn-berry,pnpm} [--pnpm-scope]
options:
-p PROJECT_REPO_NAME, --project-repo-name PROJECT_REPO_NAME
Specify the project repository name. Example: MetaMask/metamask-extension
-v RELEASE_VERSION_OLD, --release-version-old RELEASE_VERSION_OLD
The old release tag of the project repository. Example: v10.0.0
-vn RELEASE_VERSION_NEW, --release-version-new RELEASE_VERSION_NEW
The new release version of the project repository.
-s, --static-analysis
Run static analysis and generate a markdown report of the project
-d, --differential-analysis
Run differential analysis and generate a markdown report of the project
-pm {yarn-classic,yarn-berry,pnpm,npm}, --package-manager {yarn-classic,yarn-berry,pnpm,npm}
The package manager used in the project.
--pnpm-scope Extract dependencies from pnpm with a specific scope
using 'pnpm list --filter <scope> --depth Infinity'
command. Configure the scope in tool_config.py file.
Example usage:
- Software supply chain smell analysis:
python3 main.py -p MetaMask/metamask-extension -v v11.11.0 -s -pm yarn-berry
- Example output: Software Supply Chain Smells Report Example
- Differential analysis:
python3 main.py -p MetaMask/metamask-extension -v v11.11.0 -vn v11.12.0 -s -d -pm yarn-berry
Notes:
-v
should be the version of GitHub release, e.g. for this release, the value should bev11.11.0
, notVersion 11.11.0
or11.11.0
.- The
-s
flag is required for all analyses. - When using
-d
for differential analysis, both-v
and-vn
must be specified.
Java Support
Installation
Usage
Usage: Example reports: TODO add link
Academic Work
Other issues not handled by dirty-waters
- Missing dependencies: simply run mvn/pip/... install :)
- Bloated dependencies: we recommend DepClean for Java, depcheck for NPM
- Version constraint inconsistencies: we recommend pipdeptree for Python
License
MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dirty_waters-0.12.0.tar.gz
.
File metadata
- Download URL: dirty_waters-0.12.0.tar.gz
- Upload date:
- Size: 31.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c063ebc506e750b5fc8db19be38c2bca5eb7c3bbae4ada3100011deb7009059 |
|
MD5 | e660d536ea250b17b0d09c5e6c571d1d |
|
BLAKE2b-256 | 02dec9ac280dcc93f1e0062c04ebbd89ce07b58d7f5640c8898bc7ddcb8bf20a |
File details
Details for the file dirty_waters-0.12.0-py3-none-any.whl
.
File metadata
- Download URL: dirty_waters-0.12.0-py3-none-any.whl
- Upload date:
- Size: 36.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ce8be1c10804c049bcf53ab17c571a5da38ce9355d4b9c3822489f3e2c2759d |
|
MD5 | 3cae8ef714463407bea02b2f79565fea |
|
BLAKE2b-256 | 64891c7c300a6bf42dd27aaad12dd9ca5e7308fef2d2ae11c49fd4ce2130e835 |