zebbern-kali-mcp
PyPI
v1.0.17
Published by zebbern — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.
MCP server for Kali Linux security tools — connects AI agents to 145+ pentest tools via Docker
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:
The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.
2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
| −1 | publisher verification (public source) — no provenance, but the source is public and inspectable |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
Tool "zebbern_exec" appears to run shell commands or evaluate code (keyword "exec" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool zebbern_exec
Tool "exec_stream" appears to run shell commands or evaluate code (keyword "exec" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool exec_stream
Tool "reverse_shell_listener_start" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_listener_start
Tool "reverse_shell_command" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_command
Tool "reverse_shell_send_payload" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_send_payload
Tool "reverse_shell_status" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_status
Tool "reverse_shell_stop" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_stop
Tool "reverse_shell_upload_content" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_upload_content
Tool "reverse_shell_download_content" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_download_content
Tool "reverse_shell_generate_payload" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool reverse_shell_generate_payload
Untrusted-input tools ([ctf_download_file, ctf_scoreboard, kali_download, target_download_file, payload_host_start, reverse_shell_download_content, ssh_session_download_content]) co-exist with external-action tools ([zebbern_exec, exec_stream, target_upload_file, reverse_shell_listener_start, reverse_shell_command, reverse_shell_send_payload, reverse_shell_status, reverse_shell_stop, reverse_shell_upload_content, reverse_shell_download_content, reverse_shell_generate_payload]). A prompt injection could cause unwanted external actions, though no direct sensitive-data leak path was found.
Evidence: untrusted [ctf_download_file, ctf_scoreboard, kali_download, target_download_file, payload_host_start, reverse_shell_download_content, ssh_session_download_cont
Fix: Require confirmation for state-changing/egress actions triggered after processing untrusted content.
Location: flow ctf_download_file → zebbern_exec
In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_pivot_tunnel_wiring.py:114`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ort=80, key_file="/root/id_rsa", ) cmd = seen["cmd"] assert cmd[0] == "ssh" assert "-i"
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server tests/test_pivot_tunnel_wiring.py
Tool "zebbern_exec" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool zebbern_exec
Tool "exec_stream" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool exec_stream
Tool "reverse_shell_listener_start" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_listener_start
Tool "reverse_shell_command" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_command
Tool "reverse_shell_send_payload" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_send_payload
Tool "reverse_shell_status" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_status
Tool "reverse_shell_stop" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_stop
Tool "reverse_shell_upload_content" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_upload_content
Tool "reverse_shell_download_content" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_download_content
Tool "reverse_shell_generate_payload" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool reverse_shell_generate_payload
In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_checkout_source.py:16`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ELPER) converted = subprocess.run( [ "wsl.exe", "--", "wslpath",
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server tests/test_checkout_source.py
In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_deployment_config.py:46`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: f", file)] result = subprocess.run( ["docker", "compose", *compose_files, "config", "--format", "json"],
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server tests/test_deployment_config.py
In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_job_manager.py:376`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: t("sh -c 'sleep 30 &'", shell=True, timeout=5) wait_for_terminal(manager, job["job_id"]) deadline = tim
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server tests/test_job_manager.py
In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_job_routes.py:52`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: """ ) result = subprocess.run( [sys.executable, "-c", code], cwd=PROJECT_ROOT, capture_
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server tests/test_job_routes.py
In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_reverse_shell_teardown.py:3`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: tener is spawned with ``shell=True`` under ``preexec_fn=os.setsid``, so the tracked process is the SHELL and the real ``
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server tests/test_reverse_shell_teardown.py
Each tool and what it can reach — statically extracted from the published source.
reverse_shell_download_contentingests untrusted inputruns code / shellctf_download_fileingests untrusted inputctf_scoreboardingests untrusted inputexec_streamruns code / shellkali_downloadingests untrusted inputpayload_host_startingests untrusted inputreverse_shell_commandruns code / shellreverse_shell_generate_payloadruns code / shellreverse_shell_listener_startruns code / shellreverse_shell_send_payloadruns code / shellreverse_shell_statusruns code / shellreverse_shell_stopruns code / shellreverse_shell_upload_contentruns code / shellssh_session_download_contentingests untrusted inputtarget_download_fileingests untrusted inputtarget_upload_filenetwork egresszebbern_execruns code / shellad_asreproastno sensitive capabilityad_bloodhound_collectno sensitive capabilityad_kerberoastno sensitive capabilityad_ldap_enumno sensitive capabilityad_password_sprayno sensitive capabilityad_psexecno sensitive capabilityad_secretsdumpno sensitive capabilityad_smb_enumno sensitive capabilityad_tools_statusno sensitive capabilityad_wmiexecno sensitive capabilityapi_auth_bypass_testno sensitive capabilityapi_ffuf_fuzzno sensitive capabilityapi_fuzz_endpointno sensitive capabilityapi_graphql_fuzzno sensitive capabilityapi_graphql_introspectno sensitive capabilityapi_jwt_analyzeno sensitive capabilityapi_jwt_crackno sensitive capabilityapi_kiterunner_scanno sensitive capabilityapi_newman_runno sensitive capabilityapi_nuclei_scanno sensitive capabilityapi_rate_limit_testno sensitive capabilitycallback_checkno sensitive capabilitycallback_clearno sensitive capabilitycallback_generateno sensitive capabilitycallback_latestno sensitive capabilitycallback_listno sensitive capabilitycallback_startno sensitive capabilitycallback_statusno sensitive capabilitycallback_stopno sensitive capabilitycallback_waitno sensitive capabilityctf_connectno sensitive capabilityctf_get_challengeno sensitive capabilityctf_list_challengesno sensitive capabilityctf_statusno sensitive capabilityctf_submit_flagno sensitive capabilitycve_package_auditno sensitive capabilitycve_searchno sensitive capabilityexploit_copyno sensitive capabilityexploit_detailsno sensitive capabilityexploit_searchno sensitive capabilityexploit_suggest_for_serviceno sensitive capabilityexploit_suggest_from_nmapno sensitive capabilityfingerprint_headersno sensitive capabilityfingerprint_urlno sensitive capabilityfingerprint_wafno sensitive capabilityhealthno sensitive capabilityhosts_addno sensitive capabilityhosts_clearno sensitive capabilityhosts_listno sensitive capabilityhosts_removeno sensitive capabilityjob_cancelno sensitive capabilityjob_listno sensitive capabilityjob_outputno sensitive capabilityjob_statusno sensitive capabilitykali_uploadno sensitive capabilitymsf_session_createno sensitive capabilitymsf_session_destroyno sensitive capabilitymsf_session_destroy_allno sensitive capabilitymsf_session_executeno sensitive capabilitymsf_session_listno sensitive capabilityparse_tool_outputno sensitive capabilitypayload_generateno sensitive capabilitypayload_host_stopno sensitive capabilitypayload_listno sensitive capabilitypayload_one_linerno sensitive capabilitypayload_templatesno sensitive capabilitypivot_add_pivotno sensitive capabilitypivot_chisel_clientno sensitive capabilitypivot_chisel_serverno sensitive capabilitypivot_generate_proxychainsno sensitive capabilitypivot_ligolo_startno sensitive capabilitypivot_list_pivotsno sensitive capabilitypivot_list_tunnelsno sensitive capabilitypivot_removeno sensitive capabilitypivot_socat_forwardno sensitive capabilitypivot_ssh_dynamicno sensitive capabilitypivot_ssh_localno sensitive capabilitypivot_ssh_remoteno sensitive capabilitypivot_stop_all_tunnelsno sensitive capabilitypivot_stop_tunnelno sensitive capabilityread_outputno sensitive capabilitysend_inputno sensitive capabilityssh_estimate_transferno sensitive capabilityssh_session_commandno sensitive capabilityssh_session_startno sensitive capabilityssh_session_statusno sensitive capabilityssh_session_stopno sensitive capabilityssh_session_upload_contentno sensitive capabilityssh_sessionsno sensitive capabilitysystem_network_infono sensitive capabilitytools_amassno sensitive capabilitytools_arjunno sensitive capabilitytools_assetfinderno sensitive capabilitytools_byp4xxno sensitive capabilitytools_crtshno sensitive capabilitytools_enum4linuxno sensitive capabilitytools_fierceno sensitive capabilitytools_gobusterno sensitive capabilitytools_gowitnessno sensitive capabilitytools_httpxno sensitive capabilitytools_hydrano sensitive capabilitytools_johnno sensitive capabilitytools_katanano sensitive capabilitytools_masscanno sensitive capabilitytools_niktono sensitive capabilitytools_nmapno sensitive capabilitytools_sqlmapno sensitive capabilitytools_ssh_auditno sensitive capabilitytools_sslscanno sensitive capabilitytools_subfinderno sensitive capabilitytools_subzyno sensitive capabilitytools_waybackurlsno sensitive capabilitytools_wpscanno sensitive capabilityvpn_connectno sensitive capabilityvpn_disconnectno sensitive capabilityvpn_statusno sensitive capabilityCross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).
Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v1.0.17 latest |
A 93/100 | 27 | 1.13.0 | 2026-09-05 |
v1.0.15 |
A 93/100 | 27 | 1.13.0 | 2026-09-04 |
v1.0.1 |
A 93/100 | 25 | 1.13.0 | 2026-08-29 |
v1.0.0 |
A 93/100 | 23 | 1.13.0 | 2026-08-25 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan zebbern-kali-mcp --online --registry pypi
Hotel booking MCP server — 300K+ properties, real confirmation numbers, loyalty programs. Builders monetize every booking via Stripe Connect. The first MCP server that completes real hotel reservations inside AI conversations.
Manage AdGuard Home through AI assistants
Read-only Azure DevOps for MCP clients using only your existing browser session — no PAT, no Azure CLI. Browse work items, pull requests, comments, attachments and Artifacts feeds across every project, repo and feed you can access.
MCP server for Adobe Experience Manager Assets integration development
Servidor MCP para el tiempo oficial de España (API pública OpenData de AEMET). Predicción, observación y avisos como herramientas MCP tipadas.
A standalone MCP stdio bridge for Affinity by Canva's local MCP SSE server.