Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions capabilities/web-security/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
schema: 1
name: web-security
version: "1.0.3"
version: "1.0.4"
description: >
Web application penetration testing with 30+ attack technique playbooks
covering request smuggling, cache poisoning, SSRF, SSTI, DOM
Expand Down Expand Up @@ -66,7 +66,7 @@ checks:
- name: nuclei
command: 'command -v nuclei >/dev/null 2>&1 || test -x "$HOME/.pdtm/go/bin/nuclei"'
- name: httpx
command: 'command -v httpx >/dev/null 2>&1 || test -x "$HOME/.pdtm/go/bin/httpx"'
command: 'httpx -version >/dev/null 2>&1 || "$HOME/.pdtm/go/bin/httpx" -version >/dev/null 2>&1'
- name: interactsh-client
command: 'command -v interactsh-client >/dev/null 2>&1 || test -x "$HOME/go/bin/interactsh-client"'
- name: protoscope
Expand Down
102 changes: 75 additions & 27 deletions capabilities/web-security/scripts/install_tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,47 +5,88 @@ set -euo pipefail

ARCH="$(uname -m)"

# -- Go toolchain (needed for pdtm, protoscope, interactsh, surf) ---------
if ! command -v go &>/dev/null; then
GO_VERSION="1.24.3"
# The self-hosted runtime prebakes these tools. Keep this installer as a fallback
# for other sandbox providers, but never replace a binary that is already on PATH.
ensure_go() {
export PATH="$HOME/go/bin:$PATH"
if command -v go &>/dev/null; then
return
fi

GO_VERSION="1.26.6"
case "$ARCH" in
aarch64|arm64) GOARCH="arm64" ;;
*) GOARCH="amd64" ;;
esac
curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz" | tar -xz -C /usr/local
export PATH="/usr/local/go/bin:$HOME/go/bin:$PATH"
fi
export PATH="/usr/local/go/bin:$PATH"
}

# -- ProjectDiscovery tools -----------------------------------------------
install_pd_tool() {
local tool="$1" package="$2" version="$3"
if command -v "$tool" &>/dev/null; then
if [[ "$tool" != "httpx" ]] || "$tool" -version &>/dev/null; then
return
fi
fi

# -- PDTM + ProjectDiscovery tools ----------------------------------------
go install github.com/projectdiscovery/pdtm/cmd/pdtm@latest
pdtm -install nuclei,httpx,subfinder,naabu,dnsx,uncover,alterx,tlsx,asnmap
export PATH="$HOME/.pdtm/go/bin:$PATH"
ensure_go
mkdir -p "$HOME/.pdtm/go/bin"
GOBIN="$HOME/.pdtm/go/bin" go install "${package}@${version}"
export PATH="$HOME/.pdtm/go/bin:$PATH"
}

install_pd_tool nuclei github.com/projectdiscovery/nuclei/v3/cmd/nuclei v3.11.1
install_pd_tool httpx github.com/projectdiscovery/httpx/cmd/httpx v1.12.0
install_pd_tool subfinder github.com/projectdiscovery/subfinder/v2/cmd/subfinder v2.16.0
install_pd_tool naabu github.com/projectdiscovery/naabu/v2/cmd/naabu v2.6.1
install_pd_tool dnsx github.com/projectdiscovery/dnsx/cmd/dnsx v1.3.1
install_pd_tool uncover github.com/projectdiscovery/uncover/cmd/uncover v1.2.1
install_pd_tool alterx github.com/projectdiscovery/alterx/cmd/alterx v0.1.0
install_pd_tool tlsx github.com/projectdiscovery/tlsx/cmd/tlsx v1.4.0
install_pd_tool asnmap github.com/projectdiscovery/asnmap/cmd/asnmap v1.1.1

# -- katana (pre-built binary, go-tree-sitter build issue) -----------------
KATANA_VERSION="1.5.0"
DEB_ARCH="$(dpkg --print-architecture 2>/dev/null || echo amd64)"
curl -fsSL "https://github.com/projectdiscovery/katana/releases/download/v${KATANA_VERSION}/katana_${KATANA_VERSION}_linux_${DEB_ARCH}.zip" \
-o /tmp/katana.zip
unzip -o /tmp/katana.zip -d /tmp/katana_extract
mv /tmp/katana_extract/katana "$HOME/.pdtm/go/bin/katana"
chmod +x "$HOME/.pdtm/go/bin/katana"
rm -rf /tmp/katana.zip /tmp/katana_extract
if ! command -v katana &>/dev/null; then
KATANA_VERSION="1.7.0"
DEB_ARCH="$(dpkg --print-architecture 2>/dev/null || echo amd64)"
mkdir -p "$HOME/.pdtm/go/bin"
curl -fsSL "https://github.com/projectdiscovery/katana/releases/download/v${KATANA_VERSION}/katana_${KATANA_VERSION}_linux_${DEB_ARCH}.zip" \
-o /tmp/katana.zip
unzip -o /tmp/katana.zip -d /tmp/katana_extract
mv /tmp/katana_extract/katana "$HOME/.pdtm/go/bin/katana"
chmod +x "$HOME/.pdtm/go/bin/katana"
rm -rf /tmp/katana.zip /tmp/katana_extract
fi

# -- protoscope ------------------------------------------------------------
go install github.com/protocolbuffers/protoscope/cmd/protoscope@latest
if ! command -v protoscope &>/dev/null; then
ensure_go
go install github.com/protocolbuffers/protoscope/cmd/protoscope@v0.0.0-20221109213918-8e7a6aafa2c9
fi

# -- interactsh-client -----------------------------------------------------
go install github.com/projectdiscovery/interactsh/cmd/interactsh-client@latest
if ! command -v interactsh-client &>/dev/null; then
ensure_go
go install github.com/projectdiscovery/interactsh/cmd/interactsh-client@v1.3.1
fi

# -- 2fa (TOTP generator) --------------------------------------------------
go install rsc.io/2fa@latest
if ! command -v 2fa &>/dev/null; then
ensure_go
go install rsc.io/2fa@v1.2.0
fi

# -- surf (SSRF target identification) ------------------------------------
go install github.com/assetnote/surf/cmd/surf@latest
if ! command -v surf &>/dev/null; then
ensure_go
go install github.com/assetnote/surf/cmd/surf@v0.0.5
fi

# -- kiterunner (API content discovery) ------------------------------------
if ! command -v kr &>/dev/null; then
git clone --depth 1 https://github.com/assetnote/kiterunner /tmp/kiterunner
git clone --depth 1 --branch v1.0.2 https://github.com/assetnote/kiterunner /tmp/kiterunner
cd /tmp/kiterunner && make build
mv /tmp/kiterunner/dist/kr /usr/local/bin/kr
rm -rf /tmp/kiterunner
Expand Down Expand Up @@ -97,14 +138,21 @@ elif ! command -v jxscout-pro-v2 &>/dev/null; then
fi

# -- Node.js + agent-browser -----------------------------------------------
if ! command -v node &>/dev/null; then
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]' 2>/dev/null || echo 0)"
if ((NODE_MAJOR < 24)); then
curl -fsSL https://deb.nodesource.com/setup_24.x | bash -
apt-get install -y --no-install-recommends nodejs
fi
npm install -g agent-browser
agent-browser install || true
if ! command -v agent-browser &>/dev/null; then
npm install -g agent-browser@0.35.0
fi
if [[ "${DREADNODE_CAPABILITY_INSTALL:-}" != "sealed" ]]; then
agent-browser install
fi

# -- Clean up Go build cache -----------------------------------------------
go clean -cache -modcache 2>/dev/null || true
if command -v go &>/dev/null; then
go clean -cache -modcache 2>/dev/null || true
fi

echo "web-security tools installed successfully"