Skip to content

docs: scan #100 — Datus-ai/Datus-agent (1 real, issue #1415) - #140

Merged
elfrost merged 1 commit into
mainfrom
daily/2026-09-10-datus-agent
Sep 10, 2026
Merged

docs: scan #100 — Datus-ai/Datus-agent (1 real, issue #1415)#140
elfrost merged 1 commit into
mainfrom
daily/2026-09-10-datus-agent

Conversation

@elfrost

@elfrost elfrost commented Sep 10, 2026

Copy link
Copy Markdown
Owner

Scan #100 of the public series. Target: Datus-ai/Datus-agent — a NL→SQL data-analysis agent (1.7k★, Apache-2.0, DatusAI Inc.), scanned at c954fa4.

291 findings, 1 real. The legacy JWT auth surface (/auth/token, /workflows/run, /workflows/feedback) ships a hardcoded default signing secret ("your-secret-key-change-in-production") and default client credentials (datus_client/datus_secret_key) that load_auth_config returns silently whenever ~/.datus/conf/auth_clients.yml is absent — the default state of a fresh install, since only the .example is committed. Server binds 0.0.0.0:8000 by default, so a reachable attacker can authenticate with the published default or forge a JWT signed with the published constant; either token drives service.run_workflowAgent → SQL execution. Invisible to all four tools (absence/default-value shape). Verified with a differential repro imported from the module verbatim, negative control included.

Filed one focused, de-branded public issue upstream: Datus-ai/Datus-agent#1415. No SECURITY.md, PVR off, no org email — but the vulnerable constant is already committed publicly, so a public issue leaks nothing.

Adds docs/scans/datus-ai-datus-agent.html, prepends the index row + scan-log bullet, bumps 99→100.

🤖 Generated with Claude Code

…ublic issue #1415)

Legacy JWT auth surface (/auth/token, /workflows/run, /workflows/feedback)
ships a hardcoded default signing secret and default client credentials that
activate silently when ~/.datus/conf/auth_clients.yml is absent (the default
install state — only the .example is committed). Server binds 0.0.0.0:8000 by
default, so a reachable attacker can authenticate with the published default or
forge a JWT signed with the published constant; either drives the NL→SQL agent.
Invisible to all four tools (absence/default-value shape). Verified with a
differential repro imported from the module verbatim, negative control included.

Noise: 3 LiteLLM criticals are Proxy-only vs a client-library import; 79
raw/formatted-SQL are the NL→SQL engine layer (identifier FP, 11th appearance);
57 GHA hardening; all gitleaks hits in docs/samples/tests. Credited defenses:
CORS disables credentials on wildcard, scoped-sub-agent 400s unknown names,
bash sandbox fails closed, DuckDB enable_external_access=false.

No SECURITY.md, PVR off, no org email — but the constant is already public in
the repo, so a public issue leaks nothing. One focused de-branded issue filed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@elfrost
elfrost merged commit 874cf87 into main Sep 10, 2026
2 checks passed
@elfrost
elfrost deleted the daily/2026-09-10-datus-agent branch September 10, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant