Source aware sast
PenKit51 — Open-source AI penetration testing platform with 63 deep exploitation skills, multi-agent orchestration, PoC-validated findings, and native assistant skills for Claude, ChatGPT, and Grok. Authorized testing only.
npx -y skills add xAmirHamza77/PenKit51 --skill source-aware-sastAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Practical source-aware SAST and AST playbook for semgrep, ast-grep, gitleaks, and trivy fs
SKILL.md
11.0 KB, as published. Nobody here has run it
Source Aware Sast
penkit51 AI — professional penetration testing skill pack. Authorized testing only.
Deep Exploitation Guide
Source-Aware SAST Playbook
Use this skill for source-heavy analysis where static and structural signals should guide dynamic testing.
Fast Start
Run tools from repo root and store outputs in a dedicated artifact directory:
mkdir -p /workspace/.penkit51-source-aware
Baseline Coverage Bundle (Recommended)
Run this baseline once per repository before deep narrowing:
ART=/workspace/.penkit51-source-aware
mkdir -p "$ART"
semgrep scan --config p/default --config p/golang --config p/secrets \
--metrics=off --json --output "$ART/semgrep.json" .
# Build deterministic AST targets from semgrep scope (no hardcoded path guessing)
python3 - <<'PY'
import json
from pathlib import Path
art = Path("/workspace/.penkit51-source-aware")
semgrep_json = art / "semgrep.json"
targets_file = art / "sg-targets.txt"
try:
data = json.loads(semgrep_json.read_text(encoding="utf-8"))
except Exception:
targets_file.write_text("", encoding="utf-8")
raise
scanned = data.get("paths", {}).get("scanned") or []
if not scanned:
scanned = sorted(
{
r.get("path")
for r in data.get("results", [])
if isinstance(r, dict) and isinstance(r.get("path"), str) and r.get("path")
}
)
bounded = scanned[:4000]
targets_file.write_text("".join(f"{p}\n" for p in bounded), encoding="utf-8")
print(f"sg-targets: {len(bounded)}")
PY
xargs -r -n 200 sg run --pattern '$F($$$ARGS)' --json=stream < "$ART/sg-targets.txt" \
> "$ART/ast-grep.json" 2> "$ART/ast-grep.log" || true
gitleaks detect --source . --report-format json --report-path "$ART/gitleaks.json" || true
trufflehog filesystem --no-update --json --no-verification . > "$ART/trufflehog.json" || true
# Keep trivy focused on vuln/misconfig (secrets already covered above) and increase timeout for large repos
trivy fs --scanners vuln,misconfig --timeout 30m --offline-scan \
--format json --output "$ART/trivy-fs.json" . || true
Semgrep First Pass
Use Semgrep as the default static triage pass:
# Preferred deterministic profile set (works with --metrics=off)
semgrep scan --config p/default --config p/golang --config p/secrets \
--metrics=off --json --output /workspace/.penkit51-source-aware/semgrep.json .
# If you choose auto config, do not combine it with --metrics=off
semgrep scan --config auto --json --output /workspace/.penkit51-source-aware/semgrep-auto.json .
If diff scope is active, restrict to changed files first, then expand only when needed.
AST-Grep Structural Mapping
Use sg for structure-aware code hunting:
# Ruleless structural pass over deterministic target list (no sgconfig.yml required)
xargs -r -n 200 sg run --pattern '$F($$$ARGS)' --json=stream \
< /workspace/.penkit51-source-aware/sg-targets.txt \
> /workspace/.penkit51-source-aware/ast-grep.json 2> /workspace/.penkit51-source-aware/ast-grep.log || true
Target high-value patterns such as:
- missing auth checks near route handlers
- dynamic command/query construction
- unsafe deserialization or template execution paths
- file and path operations influenced by user input
Tree-Sitter Assisted Repo Mapping
Use tree-sitter CLI for syntax-aware parsing when grep-level mapping is noisy:
tree-sitter parse -q <file>
Use outputs to improve route/symbol/sink maps for subsequent targeted scans.
Secret and Supply Chain Coverage
Detect hardcoded credentials:
gitleaks detect --source . --report-format json --report-path /workspace/.penkit51-source-aware/gitleaks.json
trufflehog filesystem --json . > /workspace/.penkit51-source-aware/trufflehog.json
Run repository-wide dependency and config checks:
trivy fs --scanners vuln,misconfig --timeout 30m --offline-scan \
--format json --output /workspace/.penkit51-source-aware/trivy-fs.json . || true
JavaScript-Side Coverage
For frontends and Node services, layer these on top of the language-agnostic passes above:
retire --path . --outputformat json --outputpath /workspace/.penkit51-source-aware/retire.json || true
eslint --no-config-lookup --rule '{"no-eval":2,"no-implied-eval":2}' \
-f json -o /workspace/.penkit51-source-aware/eslint.json . || true
When you hit a minified bundle, run js-beautify <file> for a readable
view before greppping — and use jshint --reporter=unix <file> as a
lighter syntax/anti-pattern check when ESLint is over-eager. The
JS-Snooper / jsniper.sh tools (in katana.md) are the right next
step to mine those bundles for endpoint candidates.
Converting Static Signals Into Exploits
- Rank candidates by impact and exploitability.
- Trace source-to-sink flow for top candidates.
- Build dynamic PoCs that reproduce the suspected issue.
- Report only after dynamic validation succeeds.
Anti-Patterns
- Do not treat scanner output as final truth.
- Do not spend full cycles on low-signal pattern matches.
- Do not report source-only findings without validation evidence.
Platform Methodology
Source Aware Sast
penkit51 AI — professional penetration testing skill pack. Authorized testing only.
Deep Exploitation Guide
Source-Aware SAST Playbook
Use this skill for source-heavy analysis where static and structural signals should guide dynamic testing.
Fast Start
Run tools from repo root and store outputs in a dedicated artifact directory:
mkdir -p /workspace/.penkit51-source-aware
Baseline Coverage Bundle (Recommended)
Run this baseline once per repository before deep narrowing:
ART=/workspace/.penkit51-source-aware
mkdir -p "$ART"
semgrep scan --config p/default --config p/golang --config p/secrets \
--metrics=off --json --output "$ART/semgrep.json" .
# Build deterministic AST targets from semgrep scope (no hardcoded path guessing)
python3 - <<'PY'
import json
from pathlib import Path
art = Path("/workspace/.penkit51-source-aware")
semgrep_json = art / "semgrep.json"
targets_file = art / "sg-targets.txt"
try:
data = json.loads(semgrep_json.read_text(encoding="utf-8"))
except Exception:
targets_file.write_text("", encoding="utf-8")
raise
scanned = data.get("paths", {}).get("scanned") or []
if not scanned:
scanned = sorted(
{
r.get("path")
for r in data.get("results", [])
if isinstance(r, dict) and isinstance(r.get("path"), str) and r.get("path")
}
)
bounded = scanned[:4000]
targets_file.write_text("".join(f"{p}\n" for p in bounded), encoding="utf-8")
print(f"sg-targets: {len(bounded)}")
PY
xargs -r -n 200 sg run --pattern '$F($$$ARGS)' --json=stream < "$ART/sg-targets.txt" \
> "$ART/ast-grep.json" 2> "$ART/ast-grep.log" || true
gitleaks detect --source . --report-format json --report-path "$ART/gitleaks.json" || true
trufflehog filesystem --no-update --json --no-verification . > "$ART/trufflehog.json" || true
# Keep trivy focused on vuln/misconfig (secrets already covered above) and increase timeout for large repos
trivy fs --scanners vuln,misconfig --timeout 30m --offline-scan \
--format json --output "$ART/trivy-fs.json" . || true
Semgrep First Pass
Use Semgrep as the default static triage pass:
# Preferred deterministic profile set (works with --metrics=off)
semgrep scan --config p/default --config p/golang --config p/secrets \
--metrics=off --json --output /workspace/.penkit51-source-aware/semgrep.json .
# If you choose auto config, do not combine it with --metrics=off
semgrep scan --config auto --json --output /workspace/.penkit51-source-aware/semgrep-auto.json .
If diff scope is active, restrict to changed files first, then expand only when needed.
AST-Grep Structural Mapping
Use sg for structure-aware code hunting:
# Ruleless structural pass over deterministic target list (no sgconfig.yml required)
xargs -r -n 200 sg run --pattern '$F($$$ARGS)' --json=stream \
< /workspace/.penkit51-source-aware/sg-targets.txt \
> /workspace/.penkit51-source-aware/ast-grep.json 2> /workspace/.penkit51-source-aware/ast-grep.log || true
Target high-value patterns such as:
- missing auth checks near route handlers
- dynamic command/query construction
- unsafe deserialization or template execution paths
- file and path operations influenced by user input
Tree-Sitter Assisted Repo Mapping
Use tree-sitter CLI for syntax-aware parsing when grep-level mapping is noisy:
tree-sitter parse -q <file>
Use outputs to improve route/symbol/sink maps for subsequent targeted scans.
Secret and Supply Chain Coverage
Detect hardcoded credentials:
gitleaks detect --source . --report-format json --report-path /workspace/.penkit51-source-aware/gitleaks.json
trufflehog filesystem --json . > /workspace/.penkit51-source-aware/trufflehog.json
Run repository-wide dependency and config checks:
trivy fs --scanners vuln,misconfig --timeout 30m --offline-scan \
--format json --output /workspace/.penkit51-source-aware/trivy-fs.json . || true
JavaScript-Side Coverage
For frontends and Node services, layer these on top of the language-agnostic passes above:
retire --path . --outputformat json --outputpath /workspace/.penkit51-source-aware/retire.json || true
eslint --no-config-lookup --rule '{"no-eval":2,"no-implied-eval":2}' \
-f json -o /workspace/.penkit51-source-aware/eslint.json . || true
When you hit a minified bundle, run js-beautify <file> for a readable
view before greppping — and use jshint --reporter=unix <file> as a
lighter syntax/anti-pattern check when ESLint is over-eager. The
JS-Snooper / jsniper.sh tools (in katana.md) are the right next
step to mine those bundles for endpoint candidates.
Converting Static Signals Into Exploits
- Rank candidates by impact and exploitability.
- Trace source-to-sink flow for top candidates.
- Build dynamic PoCs that reproduce the suspected issue.
- Report only after dynamic validation succeeds.
Anti-Patterns
- Do not treat scanner output as final truth.
- Do not spend full cycles on low-signal pattern matches.
- Do not report source-only findings without validation evidence.
Validation & Reporting
- Confirm every finding with reproducible PoC before reporting
- Document: severity (CVSS), affected asset, steps, evidence, remediation
- Use
record_vulnerabilitywhen running inside the penkit51 platform - Chain low-severity findings into higher-impact attack paths
- Never report without evidence — distinguish hypothesis from confirmed vuln
Validation & Reporting
- Confirm every finding with reproducible PoC before reporting
- Document: severity (CVSS), affected asset, steps, evidence, remediation
- Use
record_vulnerabilitywhen running inside the penkit51 platform - Chain low-severity findings into higher-impact attack paths
- Never report without evidence — distinguish hypothesis from confirmed vuln