Scan Report
20 /100
MRAgent
LLM-powered automated Mendelian Randomization for causal discovery in biomedical research
MRAgent is a legitimate biomedical Mendelian Randomization analysis tool. All observed behaviors (R script execution, API key usage, network calls) are declared or consistent with the documented scientific purpose. No data exfiltration, reverse shells, or hidden C2 activity was found. Minor security flaws include unpinned dependencies and use of os.system() for R execution.
Safe to install
Approve for use with caution: pin all Python and R package versions before deployment, replace os.system() with subprocess.run() for better argument isolation, and do not include .idea/deployment.xml with credentials in distributable packages.
Findings 7 items
| Severity | Finding | Location |
|---|---|---|
| Low | os.system() used for R execution instead of subprocess | mrmrmr/mragent/agent_tool.py:382 |
| Low | eval() used for parsing CSV cell values into Python lists | mrmrmr/mragent/agent_workflow.py:1041 |
| Low | R packages auto-installed without version pinning | mrmrmr/mragent/agent_tool.py:268 |
| Low | Unpinned Python dependencies | mrmrmr/requirements.txt:1 |
| Info | Baidu Analytics tracking pixel in web_demo.py | mrmrmr/web_demo.py:480 |
| Info | IDE deployment config with hardcoded IPs and passwords | mrmrmr/.idea/deployment.xml:33 |
| Info | curl|sh installation instructions in README.md | mrmrmr/README.md:58 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | WRITE | WRITE | ✓ Aligned | agent_tool.py:379 writes R scripts; agent_workflow.py:921 creates output directo… |
| Shell | WRITE | WRITE | ✓ Aligned | agent_tool.py:382,483,672 uses os.system('R --slave ...') to execute dynamically… |
| Network | READ | READ | ✓ Aligned | agent_tool.py makes HTTP requests to PubMed (Entrez), OpenGWAS (gwas.mrcieu.ac.u… |
| Environment | READ | READ | ✓ Aligned | run_mragent.py:49 reads OPENAI_API_KEY and OPENGWAS_JWT; gwas_token passed to MR… |
| Skill Invoke | NONE | NONE | — | No cross-skill invocation observed |
| Clipboard | NONE | NONE | — | No clipboard access found |
| Browser | NONE | NONE | — | No browser automation found |
| Database | NONE | NONE | — | No direct database connections found |
1 Critical 1 High 37 findings
Critical Dangerous Command 危险 Shell 命令
curl -fsSL https://ollama.com/install.sh | sh mrmrmr/README.md:58 High IP Address 硬编码 IP 地址
172.25.18.14 mrmrmr/.idea/deployment.xml:33 Medium External URL 外部 URL
http://www.apache.org/licenses/ mrmrmr/LICENSE.txt:3 Medium External URL 外部 URL
http://www.apache.org/licenses/LICENSE-2.0 mrmrmr/LICENSE.txt:195 Medium External URL 外部 URL
https://doi.org/10.1093/bib/bbaf140 mrmrmr/README.md:2 Medium External URL 外部 URL
https://doi.org/10.5281/zenodo.14184396 mrmrmr/README.md:2 Medium External URL 外部 URL
https://huggingface.co/spaces/xuwei1997/MRAgent mrmrmr/README.md:2 Medium External URL 外部 URL
https://p1bvxbwjxl0.feishu.cn/docx/L0ogdoDs5ofjIux6W6gct8E4nyd?from=from_copylink mrmrmr/README.md:2 Medium External URL 外部 URL
https://www.python.org/ mrmrmr/README.md:27 Medium External URL 外部 URL
https://www.anaconda.com/download mrmrmr/README.md:28 Medium External URL 外部 URL
https://www.r-project.org/ mrmrmr/README.md:30 Medium External URL 外部 URL
https://platform.openai.com/docs/overview mrmrmr/README.md:47 Medium External URL 外部 URL
https://markdown.com.cn mrmrmr/README.md:53 Medium External URL 外部 URL
https://ollama.com/install.sh mrmrmr/README.md:58 Medium External URL 外部 URL
https://api.opengwas.io/ mrmrmr/README.md:66 Medium External URL 外部 URL
https://www.dropbox.com/s/5la7y38od95swcf/rf.rdata?dl=0 mrmrmr/README.md:102 Medium External URL 外部 URL
https://www.strobe-mr.org/ mrmrmr/README.md:125 Medium External URL 外部 URL
https://utexas.box.com/s/vkd36n197m8klbaio3yzoxsee6sxo11v mrmrmr/README.md:133 Medium External URL 外部 URL
https://www.flaticon.com/ mrmrmr/README.md:279 Medium External URL 外部 URL
https://api.gpt.ge/v1/ mrmrmr/agent_workflow_demo.py:11 Medium External URL 外部 URL
https://gwas.mrcieu.ac.uk/datasets/?trait__icontains= mrmrmr/mragent/agent_tool.py:170 Medium External URL 外部 URL
https://www.ncbi.nlm.nih.gov/research/bionlp/RESTful/pmcoa.cgi/BioC_json/[ID mrmrmr/mragent/agent_tool.py:235 Medium External URL 外部 URL
https://www.ncbi.nlm.nih.gov/research/bionlp/RESTful/pmcoa.cgi/BioC_json/ mrmrmr/mragent/agent_tool.py:236 Medium External URL 外部 URL
https://gwas.mrcieu.ac.uk/files/ mrmrmr/mragent/agent_tool.py:618 Medium External URL 外部 URL
https://uts-ws.nlm.nih.gov/rest/search/current?apiKey= mrmrmr/mragent/agent_tool.py:678 Medium External URL 外部 URL
https://uts-ws.nlm.nih.gov/rest/content/current/CUI/ mrmrmr/mragent/agent_tool.py:688 Medium External URL 外部 URL
https://www.ebi.ac.uk/gwas/rest/api/studies/search mrmrmr/mragent/agent_tool.py:716 Medium External URL 外部 URL
https://www.ebi.ac.uk/gwas/rest/api/studies/ mrmrmr/mragent/agent_tool.py:777 Medium External URL 外部 URL
https://api.finngen.fi/api/phenos mrmrmr/mragent/agent_tool.py:794 Medium External URL 外部 URL
https://api.finngen.fi/api/phenos/ mrmrmr/mragent/agent_tool.py:847 Medium External URL 外部 URL
https://gwas-api.mrcieu.ac.uk/search mrmrmr/mragent/agent_tool.py:864 Medium External URL 外部 URL
https://integrate.api.nvidia.com/v1 mrmrmr/step_2_test_STROBE_MR.py:85 Medium External URL 外部 URL
https://hm.baidu.com/hm.js?d8a4c130d7263e954bf9df2496e692c3 mrmrmr/web_demo.py:480 Info Email 邮箱地址
[email protected] mrmrmr/.idea/deployment.xml:5 Info Email 邮箱地址
[email protected] mrmrmr/.idea/deployment.xml:12 Info Email 邮箱地址
[email protected] mrmrmr/mragent/agent_tool.py:31 Info Email 邮箱地址
[email protected] mrmrmr/pyproject.toml:5 File Tree
31 files · 230.0 KB · 5318 lines Python 18f · 4530L
Markdown 2f · 414L
Text 2f · 210L
XML 7f · 131L
TOML 1f · 25L
Ignore 1f · 8L
├─
▾
mrmrmr
│ ├─
▾
.idea
│ │ ├─
▾
inspectionProfiles
│ │ │ ├─
profiles_settings.xml
XML
│ │ │ └─
Project_Default.xml
XML
│ │ ├─
.gitignore
Ignore
│ │ ├─
deployment.xml
XML
│ │ ├─
forwardedPorts.xml
XML
│ │ ├─
misc.xml
XML
│ │ ├─
modules.xml
XML
│ │ └─
vcs.xml
XML
│ ├─
▾
mragent
│ │ ├─
__init__.py
Python
│ │ ├─
agent_tool.py
Python
│ │ ├─
agent_workflow_OE.py
Python
│ │ ├─
agent_workflow.py
Python
│ │ ├─
LLM.py
Python
│ │ └─
template_text.py
Python
│ ├─
agent_workflow_demo.py
Python
│ ├─
agent_workflow_OE_demo.py
Python
│ ├─
LICENSE.txt
Text
│ ├─
pyproject.toml
TOML
│ ├─
README.md
Markdown
│ ├─
step_1_test_out.py
Python
│ ├─
step_1_test_SimCSE.py
Python
│ ├─
step_2_test_STROBE_MR.py
Python
│ ├─
step_2_test.py
Python
│ ├─
step_5_test.py
Python
│ ├─
step_9_test_out.py
Python
│ ├─
step_9_test_prompt.py
Python
│ ├─
step_9_test_SimCSE.py
Python
│ └─
web_demo.py
Python
├─
requirements.txt
Text
├─
run_mragent.py
Python
└─
SKILL.md
Markdown
Dependencies 10 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
pandas | ^1.4.2 | pip | No | Version not pinned, caret range |
reportlab | ^4.0.9 | pip | No | Version not pinned, caret range |
PyPDF2 | ^3.0.1 | pip | No | Version not pinned, note: PyPDF2 is superseded by pypdf |
numpy | ^1.19.5 | pip | No | Version not pinned, caret range |
biopython | ^1.82 | pip | No | Version not pinned, caret range |
requests | ^2.27.1 | pip | No | Version not pinned, caret range; CVE-2023-32681 was in urllib, not requests |
openai | ^1.6.1 | pip | No | Version not pinned, caret range |
ollama | ^0.1.8 | pip | No | Version not pinned, caret range |
TwoSampleMR | unpinned | R/CRAN | No | Auto-installed in R script without version constraint |
ieugwasr | unpinned | R/CRAN | No | Auto-installed in R script without version constraint |
Security Positives
✓ All network behavior (PubMed, OpenGWAS, NCBI, UMLS) is consistent with documented scientific functionality
✓ No data exfiltration to external IPs — API calls are all to legitimate biomedical databases
✓ No reverse shells, C2 infrastructure, or suspicious encoded payloads found
✓ No credential harvesting beyond declared API keys used for their intended services
✓ No hidden functionality — the codebase is a straightforward MR analysis pipeline
✓ API keys are only used to call the declared OpenAI and OpenGWAS APIs
✓ Filesystem write operations are limited to the designated output directory
✓ The .idea/ directory with credentials is not part of the main skill distribution