hackingBuddyGPT
Draft · awaiting reviewOpen-source framework for building LLM-driven security-testing agents, with use cases for Linux privilege escalation and web API testing.
Beta: The package classifiers set Development Status :: 4 - Beta. pyproject.toml L22, pyproject.toml#L22 at the checked commit
For Web and API testing, Identity attack pathsWorks with Standalone (own model access)Maintained ipa-lab, last push 2026-10-01
AgentAn agent is a program with its own model access that works through a task on its own. by ipa-lab · read from the code at 799f57e (0.5.0) on 2026-10-19The date we last read the tool’s files. The code after “at” names the exact version (the git commit) we read; a newer version may differ. · Not run yet.Whether we have run the tool in our lab. “Did more than it said” means the run used rights its description does not name; “did no more than it said” means it stayed within them.
What the code shows, worst first. No run advice yet: the one word needs a read under the full rule.
Level 2. Files. The SSH capability runs arbitrary commands on the target machine, which can create or modify files there (F.3 FS 2: on the target).
Level 2. Network. All prompt data goes to a configurable LLM endpoint defaulting to a third party, and the HTTP capability reaches LLM-chosen URLs.
Level 2. Execution. Runs arbitrary attacker- or model-chosen shell commands on the target.
Level 2. Secrets. The config layer enumerates the entire process environment, and a run also needs an LLM key plus SSH credentials.
Level 2. Persistence. The psexec connector installs a service on the Windows target to execute commands.
Level 2. Approval. Each model-proposed command is run immediately with no human confirmation, and only the configured run limits gate a run.
Before first useSettings for your AI client that limit the tool to the rights its task needs; derived from the code unless marked tested. derived from the code, not tested
- A research framework, run only against lab VMs you own, and give the lab target a throwaway SSH password, because the password is embedded in the prompt sent to the LLM provider.
What the code can reach, 0 to 3 per right; a dashed point means no evidence, never zero. The three readings
Is it for you?
- Made for
- Build LLM-driven security-testing agents while the framework supplies LLM connectivity, target connectors, run limits and logging.
- Support reproducible research alongside a re-usable Linux privilege-escalation benchmark.
- Use it when
- Escalate privileges on a Linux SSH target Identity attack paths
- Pentest a REST API detected from an OpenAPI spec or sitemap Web and API testing
- Run an Active Directory assumed-breach pentest Identity attack paths
- Test a web page over HTTP Web and API testing
- Not for
- The author restricts use to educational purposes and systems you are authorized to test.
- The author warns never to run it against real production systems and to prefer vulnerable VMs.
- You need
- Python 3.13 or newer
- An LLM provider API key (litellm format), default endpoint OpenRouter
- Target credentials for target-driving use-cases (SSH or Windows username and password)
+2 more
Details: You need
Install
linked, not distributed: the Field Guide does not bundle agents or MCP serversUpstream (linked)
git clone https://github.com/ipa-lab/hackingBuddyGPT.git cd hackingBuddyGPT uv sync source .venv/bin/activate
Quoted from README.md#L93-98 at the pinned commit; a quotation, not a command to copy.
Run it with least privilege
- note
derived from the code, not tested in the lab; a research framework, run only against lab VMs you own, and give the lab target a throwaway SSH password, because the password is embedded in the prompt sent to the LLM provider
derived, not tested: proposed from the code analysis
The record · every value with its evidence
What we checked, and what we found.
Profile read at commit 799f57e on 2026-10-25: 53 facts, each with its quoted line confirmed by script; not installed, not run in the lab.Each fact was read from the tool's files at the checked version and links to the line it comes from. Where nothing was found, the page says so instead of assuming “none”.
Selected by criteria v0.1, approved by Ilja Schlak: awaiting approval. Each section opens with the answer; the file and line of every fact follow it.
What it can change the capability groups as upstream groups them, worst first
Changes, deletes, runs commands, sends data out, according to the capabilities read.
Partly listed: AD planner/executor task delegation (perform_task, objective_complete) and knowledge-base capabilities, and the web-API document/test phase engines, are not listed as separate groups.
| Group | What it covers | Effect | On by default |
|---|---|---|---|
| HTTPRequest | The HTTP capability can issue state-changing and destructive methods (POST, PUT, DELETE, PATCH) against the target, not only read it. http_request.py L55, src/hackingBuddyGPT/capabilities/http_request.py#L55 at the checked commit | changes, deletes, sends data out | no, optional |
| LocalShellCapability | Run commands on your own machine by attaching to a named tmux session. local_shell.py L14, src/hackingBuddyGPT/capabilities/local_shell.py#L14 at the checked commit | runs commands | no, optional |
| PSExecRunCommand | Run commands on a Windows target through a psexec-created service. psexec_run_command.py L12, src/hackingBuddyGPT/capabilities/psexec_run_command.py#L12 at the checked commit | runs commands | no, optional |
| SubAgentCapability | A top-level agent with no direct target access delegates work to bounded sub-agents that hold the command capabilities. advanced.py L40, src/hackingBuddyGPT/usecases/web/advanced.py#L40 at the checked commit | runs commands | no, optional |
| HTTPRequest | Send HTTP requests to a fixed target host and return the response. http_request.py L37, src/hackingBuddyGPT/capabilities/http_request.py#L37 at the checked commit | sends data out | no, optional |
| PentestPlaybook | Return OWASP-style web/API test checklists for a given topic (no side effects). pentest_playbook.py L20, src/hackingBuddyGPT/capabilities/pentest_playbook.py#L20 at the checked commit | reads | no, optional |
| record_note / submit_flag / task_solved | RecordNote stores a note in an in-memory registry for run bookkeeping. record_note.py L13, src/hackingBuddyGPT/capabilities/record_note.py#L13 at the checked commit | reads | no, optional |
Where it sends data and who can connect to it
7 outside connections found in the files read: OpenRouter / litellm-reachable LLM provider, SSH target, HTTP target host, Windows psexec target, intercepting proxy (Burp/mitmproxy), OpenAI embeddings, OpenRouter / Anthropic.
- OpenRouter / litellm-reachable LLM provider model provider, always. Sends prompts and receives completions from the model provider; endpoint defaults to OpenRouter. llm.py L32, src/hackingBuddyGPT/utils/llm.py#L32 at the checked commit
- SSH target your targets, by default. Connects to the SSH target you specify and runs commands on it. ssh_connection.py L10, src/hackingBuddyGPT/utils/connectors/ssh_connection.py#L10 at the checked commit
- HTTP target host your targets, if you turn it on. Sends HTTP requests to the named target host during web/API testing. http_request.py L37, src/hackingBuddyGPT/capabilities/http_request.py#L37 at the checked commit
- Windows psexec target your targets, if you turn it on. Connects to a Windows target over psexec to run commands. psexec.py L9, src/hackingBuddyGPT/utils/connectors/psexec.py#L9 at the checked commit
- intercepting proxy (Burp/mitmproxy) other, if you turn it on. Optionally routes LLM API traffic through an intercepting proxy such as Burp or mitmproxy. llm.py L39, src/hackingBuddyGPT/utils/llm.py#L39 at the checked commit
- OpenAI embeddings model provider, if you turn it on. In RAG mode sends documents to OpenAI embeddings to build a vector store. rag.py L28, src/hackingBuddyGPT/utils/rag.py#L28 at the checked commit
- OpenRouter / Anthropic model provider, by default. The shipped .env.example sets the model to openrouter/anthropic/claude-3.5-sonnet, so by default prompts (which embed target credentials) go to OpenRouter/Anthropic unless the endpoint is changed. .env.example L13, .env.example#L13 at the checked commit
Listens for no connections in the files read.
Other connections not ruled out: read in the documentation and the cited code, not searched in full.
How it runs generated from the files read, never drawn by hand
Installed as a Python package; the wintermute CLI starts a chosen use-case that runs an asyncio round loop, calling an LLM through litellm (default OpenRouter) and driving a target via SSH, a local tmux shell, psexec or HTTP, writing each run to a JSONL log. README.md L15, README.md#L15 at the checked commit
Your machine
Programs and files on the machine where you run the tool.
- wintermute CLI / use-case runner The wintermute CLI lists use-cases and starts the selected one on your machine. README.md L40, README.md#L40 at the checked commit
- Local tmux shell In local_shell mode commands run on your own machine through a tmux session. local_shell.py L12, src/hackingBuddyGPT/utils/connectors/local_shell.py#L12 at the checked commit
- JSONL run logs Each run is written as an append-only JSONL trace under a logs directory. logging.py L94, src/hackingBuddyGPT/utils/logging.py#L94 at the checked commit
Outside your machine
Remote services: vendor APIs, model providers, targets, telemetry endpoints. Data sent here leaves your machine.
- LLM provider (via litellm) An LLM provider reached through litellm; the endpoint defaults to OpenRouter. llm.py L32, src/hackingBuddyGPT/utils/llm.py#L32 at the checked commit
- Target connector (SSH / psexec) The SSH/psexec connector drives the remote target you point it at. ssh_connection.py L10, src/hackingBuddyGPT/utils/connectors/ssh_connection.py#L10 at the checked commit
The six rights, read three waysThe six rights a tool can take (files, network, execution, secrets, persistence, approval), each read three ways and rated 0 to 3. 0 never means safe; “?” means no evidence. what the author says, what the code shows, what one lab run showed
Level 2 (open), read from the code. Not run in our lab yet.
0 contained · 1 scoped · 2 open · 3 privileged · ? no evidence · 0 never means safe · zero means: none declared (Declared), none found (Code), none observed (Lab)
Author says: the evidence
- Files · 2README.md L19 author states local-shell mode runs commands on the user's own machine
- Network · 1README.md L19 author declares the network target is the host the user points it at in SSH or psexec mode
- Execution · 2README.md L19 author states the software executes real commands on live systems
- Secrets · 1README.md L120 author says one provider API key is supplied by the user
- Approval · 2README.md L62 author describes use cases that run autonomously with no human approval step
Code shows: the evidence
- Files · 2ssh_execute_command.py L25 the SSH capability runs arbitrary commands on the target machine, which can create or modify files there (F.3 FS 2: on the target)
- Network · 2llm.py L32 all prompt data goes to a configurable LLM endpoint defaulting to a third party, and the HTTP capability reaches LLM-chosen URLs
- Execution · 2psexec.py L35 runs arbitrary attacker- or model-chosen shell commands on the target
- Secrets · 2configurable.py L717 the config layer enumerates the entire process environment, and a run also needs an LLM key plus SSH credentials
- Persistence · 2psexec.py L23 the psexec connector installs a service on the Windows target to execute commands
- Approval · 2strategies.py L80 each model-proposed command is run immediately with no human confirmation, and only the configured run limits gate a run
Valid for commit 799f57e (0.5.0) · checked 2026-10-19 · method reach-v0.1The published rules we follow: how tools are selected, how their rights are read and rated, how a lab run is done.
Limits and risks what the files say that fits nowhere else, and what this reading does not cover
- It executes real commands on live systems: in local-shell mode on your own machine, in SSH/psexec mode on the target. README.md L19, README.md#L19 at the checked commit
- The target SSH username and password are interpolated into the prompt text sent to the LLM provider. _base.py L22, src/hackingBuddyGPT/usecases/priv_esc/_base.py#L22 at the checked commit
- SSH connections to targets do not verify host keys (known_hosts set to None). async_ssh_connection.py L45, src/hackingBuddyGPT/utils/connectors/async_ssh_connection.py#L45 at the checked commit
- The tool-calling system prompt tells the model not to ask for confirmation because nobody will answer; it keeps going until it escalates or runs out of ideas. minimal_linux_privesc_tool_calling.py L113, src/hackingBuddyGPT/usecases/priv_esc/minimal_linux_privesc_tool_calling.py#L113 at the checked commit
- Setting proxy_insecure turns off TLS certificate verification for the LLM API session. llm.py L54, src/hackingBuddyGPT/utils/llm.py#L54 at the checked commit
- The author describes the software as a research prototype and supports only the main branch. SECURITY.md L5, SECURITY.md#L5 at the checked commit
- By default a run stops after 100 rounds or 10 dollars of cost; token and duration limits are off (0) unless set. limits.py L30-33, src/hackingBuddyGPT/utils/limits.py#L30-33 at the checked commit
- When a CLIENT_HTTP_PROXY/CLIENT_HTTPS_PROXY env var is set, HTTPRequest disables TLS certificate verification for target requests. http_request.py L28, src/hackingBuddyGPT/capabilities/http_request.py#L28 at the checked commit
- The psexec target connector creates a Windows service on the target and runs each command through cmd.exe /c. psexec.py L23, src/hackingBuddyGPT/utils/connectors/psexec.py#L23 at the checked commit
- SSHRunCommand auto-answers the target's sudo password prompt with the connection password supplied for the low-privilege user. ssh_run_command.py L24-27, src/hackingBuddyGPT/capabilities/ssh_run_command.py#L24-27 at the checked commit
- A privilege-escalation success claimed by the model is checked against real command output from the run before it counts. README.md L85, README.md#L85 at the checked commit
- Not covered: what it does at runtime. Other connections not ruled out: read in the documentation and the cited code, not searched in full.
What you need and what the documented installer does
| Kind | What |
|---|---|
| AI client | Standalone (own model access) |
| Runtime | Python 3.13 or newer. pyproject.toml L15, pyproject.toml#L15 at the checked commit |
| Model key | An LLM provider API key (litellm format), default endpoint OpenRouter. README.md L120, README.md#L120 at the checked commit |
| Credentials | Target credentials for target-driving use-cases (SSH or Windows username and password). README.md L37, README.md#L37 at the checked commit |
| Authorisation | A target you own or are authorized to test. README.md L322, README.md#L322 at the checked commit |
| Other tools | A running tmux session when using local_shell mode. README.md L161, README.md#L161 at the checked commit |
What the documented installer does
- Documented install clones the repo (main branch, not pinned) and installs it editable with uv sync or a venv plus pip install -e .; no pipe-to-shell; it adds the wintermute and log console scripts. README.md L100-102, README.md#L100-102 at the checked commit
Lab runs one run is an observation, not a benchmark
About this entry
- Type
- Agent · Offensive · works with Standalone (own model access)
- AutonomyHow much the tool decides on its own, from 0 (every step is yours) to 5 (runs a whole task unattended), as the author describes it.
- level 3 of 5
- Source
- github.com/ipa-lab/hackingBuddyGPT · MIT · manifest
pyproject.toml - Version readThe install command installs exactly the version we checked (the pinned git commit), so what you get is what the card describes.
- 799f57e · 0.5.0 · last upstream push 2026-10-01 · no release since the pinned commit
- In the catalog
- listed · added 2026-10-19 · last checked 2026-10-19 · next check 2027-01-17 · fresh
- ScannersA scan of the tool's files with a scanner for malicious patterns. “Pending” means it has not run yet.
- cisco-skill-scanner: not run, pending
- Changes
- none since the entry was added on 2026-10-19
Disagree?
Dispute a value with evidence (file, line, commit): write to hello@readbeforerun.ai. A dispute is checked against the pinned commit; a changed value is logged under Changes.
How this entry was checked, and how to cite it
Selected by the published criteria (method v0.1). What the author says comes only from author statements; what the code shows comes from the code and manifests at commit 799f57e, each with one evidence line. A “?” means no evidence, never zero; zero never means safe.
The descriptive profile (what it does, can do, how it runs, what it needs) was read through the same isolated pipeline at commit 799f57e on 2026-10-25: one reader proposed every fact with a quoted line, a script confirmed each quoted line (53 of 53), and a second reader checked each sentence against its lines. Where nothing was found, the page says so instead of assuming “none”.
Known issues and limits: remote server-side behaviour stays “?”; the lab is not your production; static analysis can miss runtime behaviour.
Placement, badges or fast tracks are not for sale. The author is employed by an IT consultancy; the company has no influence on selection, execution or result.
Cite this:
Ilja Schlak. "hackingBuddyGPT". Agentic Security Field Guide, checked 2026-10-19, method reach-v0.1. https://readbeforerun.ai/catalog/hackingbuddygpt/For maintainers
Badge for your README (reach 2 · not run yet):
[](https://readbeforerun.ai/catalog/hackingbuddygpt/)Dispute a value with evidence (file, line, commit): write to hello@readbeforerun.ai. A dispute is checked against the pinned commit; a changed value is logged under Changes.
Claim the entry with a fieldguide.yaml in your repository: planned.
Other tools for the same task
Tasks: Web and API testing, Identity attack paths. The task pages compare every tool side by side.- Code showsWebapp Testing ChecklistDraft · awaiting review
Agent skill that walks an authorized web application test through the OWASP WSTG checklist and writes a findings report.
Can add autostart, users or keys · write outside the project · run shell commands or eval · +1 more · Approval: no evidence · not run yet · checked 2026-10-21
- Code showsSupercharged Tenable Identity Exposure MCP ServerDraft · awaiting review
MCP server that exposes the Tenable Identity Exposure API as 133 tools, from Active Directory exposure queries to user and API-key management.
Can add autostart, users or keys · Approval: no evidence · not run yet · checked 2026-10-21
- Code showsShannonDraft · awaiting review
Autonomous white-box AI penetration tester for web apps and APIs; reports only vulnerabilities it proves by exploitation.
Can bypass approval · write outside the project · talk to any host · +2 more · not run yet · checked 2026-10-19
- Code showsStrixDraft · awaiting review
Autonomous AI penetration-testing agents that run offensive tools in a container sandbox and validate findings with a proof of concept.
Can tunnel or exfiltrate · use sudo or the docker socket · add autostart, users or keys · +3 more · not run yet · checked 2026-10-19