Skip to content

Chameleon

v2.19.0 Security

This release includes 5 security fixes for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 5 known CVEs

Topics

ai-coding-assistant archetype ast-analysis claude-code claude-plugin code-conventions
+12 more
code-review code-style developer-tools javascript linter mcp mcp-server prompt-engineering python ruby rails typescript

Affected surfaces

rce_ssrf

Summary

AI summary

Security hardening closes five input-handling vulnerabilities in Chameleon.

Full changelog

Security hardening from an internal source audit. chameleon treats the repo it
analyzes as untrusted input; this closes five places where that input was handled
less carefully than the rest of the code already handles it. No remote code
execution and no default-reachable exploit was found. The fixes raise the floor
and make these paths consistent with chameleon's own safe_open and
sanitize_for_chameleon_context discipline.

Security

  • The turn-end correctness judge no longer puts edited-file contents on the
    process command line.
    The reviewer prompt embeds file diffs and was passed as
    a claude -p <prompt> argument, visible in ps aux / /proc/<pid>/cmdline to
    any local process for the spawn's lifetime. It is now fed on stdin. The judge
    also drops secret-bearing files (.env, .ssh, credential dotfiles) before it
    diffs them, so a secret a developer edits is never reconstructed into the
    prompt; this reuses the forbidden-segment set safe_open already enforces, now
    matched case-insensitively for case-insensitive filesystems.
  • The archetype summary is sanitized before it reaches the model. Free prose
    from a committed archetypes.json flowed into the model-callable
    get_pattern_context response without sanitize_for_chameleon_context, while
    its sibling fields (idioms, witness) were sanitized. A crafted summary could
    carry a context-escape token or a forged status header; it now passes through
    the sanitizer like the rest.
  • The per-edit "Nearby files" listing is sanitized. Raw sibling filenames
    were appended to the advisory <chameleon-context> block unsanitized, so a file
    named with a control token (for example <|im_start|>), a bidi override, or a
    forged [🦎 chameleon: ...] header could inject. The listing now goes through
    the same sanitizer as every other repo-derived field.
  • The command log refuses symlinked paths. The exec-log directory and the
    per-session log file are created and opened without following symlinks (lstat
    before mkdir, O_NOFOLLOW on the leaf), closing a symlink TOCTOU on a shared
    TMPDIR where another local user could divert the log. The write fails open on
    any error rather than crash the recorder hook.
  • The Ruby extractor runs from a neutral working directory with RUBYOPT and
    RUBYLIB scrubbed, matching the TypeScript extractor, so a poisoned interpreter
    option cannot make ruby load repo code before the parse-only prism_dump.rb
    runs.

Security Fixes

  • The turn-end correctness judge no longer places edited-file contents on the process command line; it now feeds diffs via stdin and drops secret-bearing files (`.env`, `.ssh`) before diffing.
  • The archetype summary is sanitized through `sanitize_for_chameleon_context` before reaching the model, preventing context-escape or forged header injection.
  • The per-edit "Nearby files" listing is sanitized to prevent control token, bidi override, or forged `[🦎 chameleon: ...]` header injection.
  • The command log refuses symlinked paths by using `lstat`, `mkdir` without following symlinks, and opening the log file with `O_NOFOLLOW`, closing a TOCTOU race in shared `TMPDIR`.
  • The Ruby extractor runs from a neutral working directory with `RUBYOPT` and `RUBYLIB` scrubbed, matching the TypeScript extractor's isolation.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Chameleon

Get notified when new releases ship.

Sign up free

About Chameleon

All releases →

Related context

Earlier breaking changes

  • v3.0.0 MCP surface folded from 48 tools to 19; remaining 32 operator tools become actions on three dispatchers.

Beta — feedback welcome: [email protected]