Commit Graph
25 Commits
Author SHA1 Message Date
Joseph Magly 95868c3d37 Merge remote-tracking branch 'upstream/main' into pr-47
# Conflicts:
#	README.md
2026-07-16 11:55:20 -04:00
Joseph Magly db48d881f7 Merge branch 'pr-80' into pr80-delivery
# Conflicts:
#	docs/index.html
#	src/__tests__/local-api-hardening-static.test.ts
2026-07-16 01:18:03 -04:00
Joseph Magly 9775038507 Merge branch 'pr-94' into pr-delivery-74-94-18-39-41 2026-07-16 00:49:26 -04:00
adrianwandCodex 089591b18f feat(scan): add live progress and recon bootstrap (#81)
* Add live scan progress view

* Make local-agent recon report real tool progress

* Feed recon bootstrap into local agent ReAct loop

* Remove stale local-agent JSON tool parser

* Label backend-seeded scan progress

---------

Co-authored-by: Codex <codex@openai.com>
2026-07-15 19:42:20 -04:00
Joseph Magly db2d270af5 fix(server): avoid caller cwd dotenv loading (#96) 2026-07-15 19:39:12 -04:00
Joseph Magly 51f610f3a5 fix(local-agents): support current Codex exec CLI (#95) 2026-07-15 19:09:34 -04:00
Joseph Magly 4b81bf6436 fix(local): honor server LLM for keyless missions 2026-07-15 18:13:27 -04:00
Eddy 25f86b0c66 fix: reject curl destination override flags
* fix: reject curl destination override flags

* fix: block additional curl target bypass forms
2026-07-15 18:12:35 -04:00
psighoandClaude Opus 4.8 7127fe8220 fix(server): accept same-origin requests from a non-loopback UI bind (#84)
When the operator binds the server to a non-loopback address
(T3MP3ST_HOST=0.0.0.0 or a LAN IP) they've explicitly opted into network
access — the same decision that already stands the anti-rebinding Host guard
down. But the CSRF origin guard and the SSE guard were NOT updated to match:
they still only trust loopback origins, so the operator's own LAN-served UI
(e.g. http://192.168.x.x:3333/ui) had every state-changing request and the
event stream rejected with "Cross-origin request rejected". That makes hunts
fail on any target from a LAN-accessed War Room (issue #84).

Fix: add isSameOriginAsHost() and, ONLY on a non-loopback bind, also trust a
request whose Origin/Referer host:port equals this server's own Host header —
i.e. a genuine same-origin request from the operator's own UI. A foreign origin
(evil.com) still mismatches the Host and is rejected, so the CSRF/drive-by
protection is preserved. On a loopback bind the branch is skipped entirely:
the strict loopback-only gate plus the Host guard remain fully in force, so
there is no new CSRF or DNS-rebinding surface for the default configuration.

Verified against a 0.0.0.0-bound instance:
  - same-origin LAN request  (Origin==Host, non-loopback) → passes the guard ✅
  - foreign origin (evil.com)                             → still 403 ✅
  - no Origin (curl/CLI)                                  → allowed ✅
Typecheck clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 01:57:09 +05:00
Codex 6fef62aa8e Narrow authorize-target to pending approvals 2026-07-12 09:50:43 -04:00
Codex 3d6dc62957 Tighten approval receipt scoping 2026-07-12 09:50:43 -04:00
Codex 964fe5b3ba Add scope receipts approval UI 2026-07-12 09:50:43 -04:00
Codex d500a29186 Ask approval for Admiral expanded scope 2026-07-12 09:50:43 -04:00
Codex f2ec1e9437 Reuse target-scoped approval receipts 2026-07-12 09:50:42 -04:00
Codex 75b7ca02ef Honor local agent timeout defaults 2026-07-07 16:05:20 -04:00
Codex 49d0827650 Block phase progress without live backend 2026-07-07 16:04:40 -04:00
Codex fb0feb0028 Report stale local agent backends 2026-07-07 16:04:40 -04:00
Nicolas Pastorello 48b27bd6f5 fix: Docker healthcheck connection refused
- Bind to 0.0.0.0 inside containers (DOCKER=true env marker)
- Healthcheck was failing because localhost resolved to IPv6 ::1
  but server was bound to IPv4 127.0.0.1
- External exposure still protected via Coolify port mapping to 127.0.0.1
2026-07-06 19:35:02 -03:00
pliny 2f2f6678f4 Merge pull request #15 from joey-david/fix/local-agent-deselection
fix: local agent deselection
2026-07-05 13:57:48 -04:00
Joey e8dc0b465e Fix local agent deselection 2026-07-05 14:58:12 +02:00
Eddy ec4616c42e fix: tighten local API execution guards 2026-07-05 12:07:02 +02:00
faber 6c57e09023 T3MP3ST v1 — hardened launch (AGPL, verify-claims 24/24, leak-scrubbed) 2026-07-04 21:11:05 -04:00
t3mp3st contributorsandClaude Opus 4.8 06ffe3ef66 feat: pack-hunt safety + opt-in Kali+ arsenal + capability-approval gate + tester-feedback UX
Adds three coordinated capabilities and tightens two defaults on purpose — this is
safety hardening, NOT a backward-compatible drop-in (see "Tightened defaults").
Fifteen independent adversarial review passes; findings fixed and test-pinned.

- Pack-hunt safety: a strict-majority adjudicator with a comment/string/regex/
  raw-string/heredoc/POD-aware cite-check (language-gated across C/C++/Py/Rust/Go/
  Java/JS/TS/shell/SQL/PHP/Ruby/Perl) so a hallucinated killing-guard can't refute
  a real finding — the cited comparison's operator must match source, and a
  string/regex/heredoc/generic-arglist/template-interpolation is blanked before
  matching. Plus a rate-limit/degraded-health tracker, a global LLM semaphore, and
  a PackBoard with an atomic claim CAS + snapshot-on-emit/clone-on-ingest.
- Opt-in Kali+ arsenal (T3MP3ST_FULL_ARSENAL, OFF by default): 35 default tools
  (31 built-in + 4 external-CLI wrappers) -> 83 with the catalog armed (verify-claims
  CLAIM 4). Most adapters need the underlying binary installed. metasploit / hydra /
  bloodhound are never minted through the generic factory.
- Capability-approval + spicy-action gate for the NEW dangerous arsenal only
  (pre-existing built-ins keep running freely): approve-once, fail-safe deny when
  unattended, redacted audit trail over SSE. T3MP3ST_GATE_BUILTINS=1 extends it to
  the spicy built-in probes. Audit redaction is a pure, unit-tested module.

Tightened defaults (intentional, ON by default — NOT backward-compatible):
- Egress containment: once a mission target is set, built-in networked tools refuse
  off-scope public hosts (not the target/subdomains, not loopback/private) with
  SCOPE DENIED — keeps the agent on authorized scope.
- Role-specialized operator toolkits: each archetype gets a curated default tool
  menu (scanner -> scan tools, exploiter -> sqli/xss/etc). Tools stay registered
  team-wide; the per-role menu is the operator's working set.

UX (from live-tester feedback): a one-click "Approve & run" modal when a standard
Hunt blocks on an external-target receipt (was a dead-end); bounded-parallel
benchmark file ingestion; the deterministic mission-gate chip co-located with the
subjective SITREP pace narration (no more "behind schedule" next to a clean gate);
and click-through finding detail + evidence in the UI (was export-only).

Docs: README + INTEGRITY_LEDGER made re-derivable — honest 35/83 tool count, the
egress-containment default documented, and the Cybench number reconciled to the
single verify-claims-enforced 23/40 = 58% (dropped the stale/uncited 21 and 26).
README voice pass: killed the underselling `Successful Exploits: 0` disqualifier
(read as "never popped anything" — false, given CVE-Zero + the live disclosure
pipeline); swagger now rests on receipts, not vibes. Also corrected the operator
status — the downstream operators run the SAME real tool-backed ReAct loop as
recon (not "orchestration stubs"); the honest limit is that the coordinated swarm
is unproven (single-agent is the benchmarked path), not that they're scaffolding.

Gates: 292 tests, tsc + lint clean, verify-claims 20/20, arsenal:smoke 125/0,
disclosure-CLI self-test 11/11.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 09:38:23 -04:00
t3mp3st contributors 184c7d4e59 T3MP3ST public launch build 2026-07-03 10:57:20 -04:00
pliny 5bec530a89 Add files via upload 2026-07-02 13:56:02 -04:00