The SBOM Transparency v. Exposure Dilemma: A Case Study on Adversarial Access to Public SBOMs in Healthcare
Repository for the paper by Jiarou Deng, Yang Yang (Johns Hopkins University), and Michael Rushanan (Harbor Labs).
This repo contains code and artifacts to reproduce the study's analyses of public software bills of materials (SBOMs) in healthcare and their impact.
- Whats in this Repo
- Quickstart
- Reproducing Results
- Artifacts
- Citation
- Contributions
- Responsible Use
- License
- Contact
Health and Medical Security (HMS) lab research projects organize tools and data with implications beyond the research paper in their own top-level directories. The artifacts directory includes code and data relevant to the paper and reproducibility of the research. The paper directory contains the camera-ready LaTeX clone, written in Overleaf.
├── deidentify/ # SBOM anonymization script
├── sboms/ # Case-study SBOMs (sources noted in README in this dir)
├── artifacts/ # Reproduction steps, intermediate outputs, figures
│ ├── scripts/ # Dependency Track container to perform SBOM CVE lookup
│ ├── analysis/ # CVE exploit validation containers and logs
└── paper/ # LaTeX source for the manuscript
We performed our analysis on Kali Linux. Any Debian-based Linux distribution should work similarly; however, we cannot warrant the results. All commands are executed in a terminal emulator and in the ./artifacts directory.
$ sudo apt install docker.io docker-compose python3$ cd ./cve-lookup
$ docker compose up -d --build- Go to http://localhost:8080/
- Log in using the default credentials
admin/admin - Navigate to
Administration/Access Management/Team - Select
Automation - In
Permissions, select:PORTFOLIO_MANAGEMENT,PROJECT_CREATION_UPLOAD, andVIEW_PORTFOLIO - Select
API Keysand generate an API key - Copy the key to use it as an environment variable
$ # In ./cve-lookup directory
$ docker exec -it python-client bash
$ export DT_API_KEY=your_api_key_here$ # In ./cve-lookup directory
$ python owasp_scan.pyThe vuln_list.json file is generated using the Dependency Track API after it performs a complete vulnerability lookup on the de-identified SBOM software component CPEs and PURLs using default vulnerability sources, including GitHub Advisories, NVD, and OSV data. Our code filters vulnerabilities by Critical and High severity to minimize the size of our target data set.
$ # In ./cve-lookup directory
$ cat vuln_list.jsonWe implemented a semi-automated analysis using the OpenAI o3 model. In particular, we entered a structured prompt into the ChatGPT chat interface for each CVE we identified in our previous steps, then recorded the model-generated step-by-step attack procedure or blueprint, as we call it. We captured the attack blueprints in the ./artifacts directory.
The following list enumerates our semi-automated analysis in detail:
- Export CVEs from Dependency Track (
vuln_list.json) - For each CVE, craft a structured prompt (
./artifacts/analysis/prompt.txt) that includes the CVE ID - Enter the prompt into the ChatGPT chat interface and record the model-generated step-by-step attack blueprint.
- Implement the model’s suggested exploitation steps in a controlled Docker container to validate the exploit (i.e., did it work or not)
- If a suggested step fails, copy the error message (or failing output) back into the chat and request targeted debugging guidance
- Iterate with the model until the step succeeds or problems are unresolved
- Record the final, validated steps
While we used ChatGPT and the OpenAI o3 model, our approach is not limited to these technologies.
This section details how to utilize the provided inputs to replicate our reported outputs, a step that is crucial for the integrity and reproducibility of the research.
- Browse to ChatGPT
- Optionally, though recommended, log in using your personal account
- Start a new chat
- Select
o3in the model selector - Open the file
./artifacts/analysis/prompt.txt - Copy all of its contents and enter the CVE-ID of your choice
- Paste the content and CVE-ID into ChatGPT as your message
- Send the message without adding anything else
- (Optional) Save the full reply as
./artifacts/analysis/response.txt
Do not enable browsing/tools or add extra instructions. Using the exact prompt text and o3 model is sufficient for reproducing our reported output.
We captured our artifacts in the ./artifacts directory. Important files and folders include:
./artifacts/scripts./artifacts/analysis
@inproceedings{deng-yang-rushanan-healthsec25,
author = {Jiarou Deng and Yang Yang and Michael Rushanan},
title = {The SBOM Transparency v. Exposure Dilemma: A Case Study on Adversarial Access to Public SBOMs in Healthcare},
booktitle = {Proceedings of the Healthcare Security Workshop (HealthSec 2025)},
note = {ACSAC Workshop},
location = {Honolulu, Hawaii, USA},
date = {2025-12-09},
year = {2025},
publisher = {IEEE},
url = {https://publish.illinois.edu/healthsec2025/}
}We welcome contributions that:
- Improve automation of SBOM attack blueprints
- Validate proof-of-concept exploits in a controlled research setting
- Enhance de-identification and evaluation metrics
Please open an issue first to discuss the scope of a contribution. For code, submit a PR that references the issue, includes tests, a short design note, and, where applicable, before/after results. See GitHub Issues for more information, or Link PR to issue to get started now.
- Research use only: This repository and its associated exploit validation code should be for research only.
- Healthcare context: Be mindful of how you use the deidentification tool, as anonymized SBOMs may still reveal sensitive vendor or product composition details.
- Disclosure: If you discover a previously unreported vulnerability, follow the coordinated disclosure process for the software or product in question, and do not file the details here.
See LICENSE.md.
Please contact Dr. Michael Rushanan, the principal investigator, for any reason not described above.