Sécurité IA

AI Security — 03 Sep 2026

Lo nuevo hoy

Today's highlights

Points forts du jour

Click en cualquiera para ir al detalle

Click any item to jump to the full section

Cliquez un élément pour aller à la section complète

🚨

Top Incidents

Breach

GitSpawn: un .git/config hostil hace que siete agentes de código ejecuten comandos antes de pedirte permiso

Manifold Security publicó GitSpawn, una clase de bug que afecta a siete agentes de código a la vez. El truco es viejo y elegante: Git tiene una opción de configuración llamada core.fsmonitor que define un comando que Git ejecuta para saber qué archivos cambiaron. Vive en el .git/config del repositorio, o sea que viaja con el repo.

Los agentes corren git status y git diff por su cuenta, en segundo plano, para entender el estado del working tree. Y lo hacen sin sanitizar la config del repo. Resultado: el comando del atacante corre fuera del sandbox del agente y ANTES de que aparezca cualquier prompt de aprobación. No hay nada que aprobar porque el agente todavía no decidió hacer nada, apenas está mirando el repo.

El estado de parches está desparejo: goose corregido en 1.44.0 (CVE-2026-72718, CVSS 4.0 de 7.0), Codex CLI en 0.131.0 (CVE-2026-19592, más otros dos CVEs de la misma clase), Claude Code corregido en 2.1.196 para el camino de core.fsmonitor (CVE-2026-55607, que cubre operaciones de worktree) —pero el camino vía claude ultrareview seguía sin parche en 2.1.258. Hermes Agent, Qwen Code y Grok Build siguen sin corregir.

Ojo con esto: clonar un repo para que un agente lo mire ya no es una acción de solo lectura. Si tu flujo es «cloná este PR de un contribuidor y pedile al agente que lo revise», estás ejecutando código del contribuidor.

02 Sep 2026
The Hacker News →
Breach

Unit 42: agentes hicieron cada paso de la intrusión en menos de 10 horas y dejaron una auditoría de 80 páginas

Unit 42 (Palo Alto Networks) documentó una intrusión donde un operador humano usó modelos de frontera para hacer cada etapa de la cadena. Tiempo total: menos de 10 horas. Un equipo humano tarda unas dos semanas en el mismo recorrido.

La secuencia: agentes de reconocimiento encontraron un endpoint de API público vulnerable y lo usaron para entrar; adentro, agentes automatizados mapearon los microservicios internos; subagentes rastrillaron los repositorios de código en busca de tokens y contraseñas de servicio hardcodeadas; con esas credenciales llegaron al gestor de secretos de la organización y sacaron acceso administrativo maestro. Después, «agentes de pivoteo especializados» validaron ese acceso contra cloud, identidad, CI/CD, contenedores y SaaS. Para persistir, secuestraron workflows de CI/CD y robaron access keys de cloud —y reutilizaron los servicios de IA de la propia víctima como infraestructura post-compromiso.

Al final dejaron un informe de 80 páginas detallando las vulnerabilidades que explotaron. Unit 42 no quiso decirle a The Register qué modelos o frameworks se usaron.

Lo que cambia acá no es ninguna técnica nueva, todas son conocidas. Lo que cambia es que el agente monitoreaba, evaluaba y replanificaba en tiempo real durante toda la cadena. Tus ventanas de detección estaban calibradas para semanas de dwell time. Ahora tenés horas.

02 Sep 2026
The Register →
🛡️

Framework CVEs

Crítico

CVE-2026-79675 — NLTK: el fix de inyección de argumentos a la JVM no cubre el camino por llamada (9.3)

Un fix incompleto, que es la peor categoría de bug porque el equipo ya cree que el problema está resuelto. El parche de CVE-2026-12841 agregó _validate_java_options() en nltk/internals.py para bloquear flags peligrosos de la JVM: -agentlib, -agentpath, -javaagent, -Xrunjdwp y referencias a @argfile.

El problema: esa validación solo corre cuando configurás opciones globales vía config_java(). La función java() acepta además un parámetro options por llamada —agregado en el PR #3683, que a su vez era el fix de CVE-2026-12615— y ese camino pasa las opciones directo a subprocess.Popen sin validar nada. Las cuatro clases wrapper de Stanford aceptan java_options del usuario y todas enrutan por ahí.

O sea: dos fixes de seguridad consecutivos, y el segundo abrió un bypass del primero. CVSS v4 9.3, v3 9.8. Si tu pipeline de NLP le pasa java_options a los wrappers de Stanford con algo derivado de input externo, tenés ejecución de código.

01 Sep 2026
GitHub Security Advisory →
Alto

CVE-2026-62388 — NLTK: el módulo pathsec viene con ENFORCE=False, o sea solo emite warnings (8.7)

El módulo pathsec.py de NLTK existe porque fue el fix de dos vulnerabilidades reales: CVE-2024-39705 (ejecución de código arbitrario vía pickle) y CVE-2026-0846 (path traversal). Tiene ocho funciones de validación.

Las ocho consultan la constante ENFORCE en la línea 24, que por defecto vale False. Con ese default, cada control emite un RuntimeWarning y deja pasar la operación en vez de tirar excepción. En la práctica: pathsec.open('/etc/passwd') lee el archivo, pathsec.validate_network_url('http://169.254.169.254/...') deja llegar al endpoint de metadata de la nube, y nltk.data.load() ejecuta pickle.loads() sobre una fuente no confiable. Todo con un warning que nadie lee, porque los warnings de Python se pierden en el ruido de cualquier pipeline de ML.

Un control de seguridad apagado por defecto no es un control de seguridad, es documentación. Poné la variable de entorno en enforce.

02 Sep 2026
GitHub Security Advisory →
Alto

CVE-2026-81726 — NLTK: las APIs de artefactos de modelo escriben fuera de los roots permitidos, sin parche (8.3)

Tercer problema de NLTK en la misma tanda, y el más incómodo porque todavía no hay parche. Incluso cuando activás la seguridad de rutas de NLTK, varias APIs de artefactos de modelo siguen tratando las rutas controladas por el llamador como nombres de archivo comunes: usan open() nativo en vez de los helpers con pathsec.

Los afectados: TransitionParser.train (escribe fuera del root), TransitionParser.parse (lee fuera del root), AveragedPerceptron.save y .load, PerceptronTagger.save_to_json, y save_maxent_params. Los mismos paths de afuera del root son rechazados correctamente por los helpers protegidos —así que el sandbox existe, simplemente estas rutas de código no lo usan.

Reproducido en la 3.9.4 publicada y en el source actual v3.10.0-rc2. Sin versión parcheada al momento de escribir esto.

02 Sep 2026
GitHub Security Advisory →
📦

Supply Chain

Alto

MLflow: el flavor de statsmodels ignora MLFLOW_ALLOW_PICKLE_DESERIALIZATION=False y te da RCE (8.8)

MLflow introdujo MLFLOW_ALLOW_PICKLE_DESERIALIZATION como control de seguridad para frenar el pickle.load inseguro durante la carga de modelos —fue la respuesta a la serie CVE-2024-37052 hasta CVE-2024-37060. Cuando lo ponés en False, la expectativa del operador es clara: nada de pickle, punto.

El flavor mlflow.statsmodels omite ese guard por completo. El fix más reciente (#21188) había tapado un bypass en el flavor pyfunc, pero no tocó statsmodels. Un atacante que pueda poner un artefacto MLmodel armado en cualquier artifact store accesible logra ejecución de código arbitrario en cualquier proceso que llame a mlflow.pyfunc.load_model() contra ese modelo —con el flag en False.

Esta es la definición exacta de un bypass de control de seguridad: el operador cree que mitigó el RCE por pickle, y el flavor lo ignora en silencio. Si tenés un registry de modelos donde varios equipos escriben, revisá qué flavors están habilitados antes que el flag.

01 Sep 2026
GitHub Security Advisory →
Crítico

CVE-2026-62674 — Omnigent: sobrescribir un agente compartido convierte cada sesión futura en RCE (9.0)

Omnigent (Databricks) es un meta-harness que corre Claude Code, Codex y Pi bajo políticas y sandboxing. La UI muestra los agentes compartidos y de template como no editables por MCP. Pero el endpoint de subida completa del bundle, PUT /sessions/{session_id}/agent, sigue aceptando un bundle de reemplazo.

El chequeo de permisos que hace ese endpoint es LEVEL_EDIT sobre la sesión —o sea, sobre tu propia sesión. Un usuario autenticado con acceso de edición a su sesión puede sobrescribir el agente compartido para todos. Agregando un servidor MCP stdio a ese agente compartido, cada sesión futura de runner que lo use arranca un comando del atacante.

Es supply chain interna: no envenenaste un paquete de npm, envenenaste la plantilla de agente que usa todo el equipo. Un solo permiso mal alcanzado —permiso sobre la sesión usado para autorizar una escritura sobre un recurso compartido— y el radio de impacto pasa de un usuario a la organización entera.

02 Sep 2026
GitHub Security Advisory →
Medio

CVE-2026-71492 — Banks: el registry de prompts escribe donde le digas, incluso rutas absolutas (6.0)

Banks es una librería de gestión de prompts para LLMs. Su DirectoryPromptRegistry.set() interpola Prompt.name —controlable por el atacante— dentro de una expresión Path, sin canonicalizar nada. En src/banks/registries/directory.py:44:

prompt_file = path / f"{prompt.name}.{prompt.version}.jinja"
prompt_file.write_text(prompt.raw)

Dos modos de falla. El obvio: name="../victim/foo" resuelve a <registry>/../victim/foo.0.jinja, afuera del root. El menos obvio, y más interesante: pathlib documenta que Path("/a") / Path("/b") devuelve Path("/b"). Así que name="/abs/path" descarta el root del registry por completo —el registry ni se consulta.

Detalle que empeora la cosa: el name envenenado se persiste en index.json, así que la ruta fuera del root se sigue reconstruyendo después. Y el contenido escrito es una plantilla Jinja. Si tu app deriva el nombre del prompt de datos de request, alguien te escribe bytes elegidos en cualquier parte del filesystem.

02 Sep 2026
GitHub Security Advisory →
🎯

LLM Attacks & Research

Investigación

Cyber Weapon Index: de 18 modelos evaluados, solo Claude Mythos completó la kill chain entera sola

Booz Allen Hamilton publicó el Cyber Weapon Index, un framework que evalúa la capacidad autónoma de los modelos en ataques, combinando puntaje de investigación de vulnerabilidades con métricas de avance en la kill chain. Probaron 18 modelos bajo condiciones idénticas: nueve estadounidenses y nueve chinos.

Claude Mythos, de Anthropic, sacó 80 y fue el único que completó la kill chain completa de forma autónoma. Con credenciales robadas obtuvo acceso de administrador en todos los intentos, e identificó por su cuenta caminos de escalada de privilegios sin seguir una secuencia predeterminada. Otros tres —Grok-4.5, Muse Spark 1.1 y GLM-5.2— llegaron a acceso total de dominio. Cuatro lograron movimiento lateral. Todos menos uno consiguieron acceso inicial a la red.

El dato que más te tiene que preocupar no es el número de arriba: «cuando se lo emparejó con un harness de ataque, Claude Sonnet rivalizó con la performance de Claude Mythos». Traducido: el software de orquestación amplifica tanto como el modelo. Tu modelo de amenaza no puede estar anclado a qué modelo de frontera está disponible, porque un modelo más chico con buen harness llega al mismo lugar.

02 Sep 2026
The Register →
Alto

CVE-2026-62676 — Omnigent: el parser de shell falla abierto, y None significa permitir (7.1)

Reportado por Aeon, un agente de seguridad autónomo —o sea, un agente encontrando bugs en el harness que gobierna a otros agentes. El componente es omnigent/policies/builtins/_shell.py, el parser de comandos shell compartido que consumen github.py (allowlist de write_repos y write_branches) y working_dir.py (confinamiento al workspace).

El parser falla abierto. Cuando un comando gateado está escrito de una forma que el parser no reconoce, no produce ninguna operación; el evaluador de políticas devuelve None; y None es abstención, que se trata como ALLOW. O sea que cualquier comando que el parser no entienda pasa por encima de las dos garantías centrales del producto a la vez: la allowlist de repos y branches, y el confinamiento al working directory.

Este es el patrón que vas a ver una y otra vez en guardrails de agentes: la política se escribe como «denegar lo que reconozco como malo» y el parser es la superficie de ataque real. Un agente con prompt injection no necesita romper la política, solo necesita escribir el comando de una forma que el parser no parsee.

02 Sep 2026
GitHub Security Advisory →
📢

Vendor Advisories

Aviso

Google, Anthropic y OpenAI sacan modelos de ciberseguridad el mismo día, cada uno con su programa de acceso

Los tres laboratorios anunciaron el mismo día, y la coincidencia dice más que los anuncios.

Google presentó Gemini 3.8 Flash Cyber, su modelo de ciberseguridad más capaz, accesible por el nuevo Fairwind Program: acceso temprano para gobiernos, prestadores de salud y telecomunicaciones, con más de 650 organizaciones asociadas, entre ellas CrowdStrike y Palo Alto Networks.

Anthropic lanzó Claude Fable 5.1 y Claude Mythos 5.1 con salvaguardas diferenciadas: Fable 5.1 ahora permite trabajo de identificación de vulnerabilidades, aunque ciertas tareas de ciberseguridad siguen restringidas. Sumó Enterprise Frontier Safeguards, que combina retención cero de datos con salvaguardas reforzadas, y reconoció incidentes previos de acceso no autorizado más medidas extra de contención para fallas de alineamiento.

OpenAI dijo que su modelo Astra, todavía sin salir, alcanza el umbral de capacidad crítica en ciberseguridad: detecta y explota zero-days por su cuenta, con tasas de ejecución de código arbitrario muy superiores a las de sus predecesores, y encontró vulnerabilidades desconocidas durante las pruebas. Lo va a liberar de forma controlada por el programa Daybreak Blue.

Los tres describen la misma cosa: capacidad ofensiva real, entregada tras una puerta de acceso curada. Y el índice de Booz Allen de esta misma jornada muestra qué tan poco te protege esa puerta cuando el harness importa tanto como el modelo.

02 Sep 2026
The Hacker News →
🚨

Top Incidents

Breach

GitSpawn: a hostile .git/config makes seven coding agents run commands before asking you

Manifold Security published GitSpawn, a bug class hitting seven coding agents at once. The trick is old and elegant: Git has a config option called core.fsmonitor that names a command Git runs to learn which files changed. It lives in the repository's .git/config, which means it travels with the repo.

Agents run git status and git diff on their own, in the background, to understand the working tree state. And they do it without sanitizing the repo config. The result: the attacker's command runs outside the agent's sandbox and BEFORE any approval prompt appears. There is nothing to approve, because the agent has not decided to do anything yet — it is merely looking at the repo.

Patch status is uneven: goose fixed in 1.44.0 (CVE-2026-72718, CVSS 4.0 base 7.0), Codex CLI in 0.131.0 (CVE-2026-19592, plus two more CVEs in the same class), Claude Code fixed by 2.1.196 for the core.fsmonitor path (CVE-2026-55607, covering worktree operations) — but the claude ultrareview path was still unfixed as of 2.1.258. Hermes Agent, Qwen Code and Grok Build remain unpatched.

Take this one seriously: cloning a repo so an agent can look at it is no longer a read-only action. If your workflow is «clone this contributor's PR and have the agent review it», you are executing the contributor's code.

02 Sep 2026
The Hacker News →
Breach

Unit 42: agents did every step of the intrusion in under 10 hours, then left an 80-page audit

Unit 42 (Palo Alto Networks) documented an intrusion where a human operator used frontier models for every stage of the chain. Total elapsed time: under 10 hours. A human team takes roughly two weeks for the same run.

The sequence: recon agents found a vulnerable public API endpoint and tunneled in; inside, automated agents mapped the internal microservices; subagents scraped code repositories for hardcoded tokens and service passwords; those credentials got them into the organization's secret-management system and master administrative access. Then «specialist pivot agents» validated that access across cloud, identity, CI/CD, container and SaaS environments. For persistence they hijacked CI/CD workflows to steal cloud access keys — and repurposed the victim's own cloud AI services as post-compromise infrastructure.

On the way out they left an 80-page security audit detailing the vulnerabilities they had exploited. Unit 42 would not tell The Register which models or frameworks were involved.

What changes here is not any single technique — all of them are known. What changes is that the agent monitored, evaluated and replanned in real time across the whole chain. Your detection windows were calibrated for weeks of dwell time. You now have hours.

02 Sep 2026
The Register →
🛡️

Framework CVEs

Critical

CVE-2026-79675 — NLTK: the JVM argument injection fix misses the per-call path (9.3)

An incomplete fix — the worst category of bug, because the team already believes the problem is solved. The CVE-2026-12841 patch added _validate_java_options() in nltk/internals.py to block dangerous JVM flags: -agentlib, -agentpath, -javaagent, -Xrunjdwp and @argfile references.

The problem: that validation only runs when you set global options through config_java(). The java() function also accepts a per-call options parameter — added in PR #3683, which was itself the CVE-2026-12615 fix — and that path passes options straight to subprocess.Popen with no validation at all. All four Stanford Java wrapper classes accept user-supplied java_options and all of them route through it.

So: two consecutive security fixes, and the second one opened a bypass of the first. CVSS v4 9.3, v3 9.8. If your NLP pipeline feeds java_options into the Stanford wrappers from anything externally derived, you have code execution.

01 Sep 2026
GitHub Security Advisory →
High

CVE-2026-62388 — NLTK: pathsec defaults to ENFORCE=False, so it only warns (8.7)

NLTK's pathsec.py module exists because it was the fix for two real vulnerabilities: CVE-2024-39705 (arbitrary code execution via pickle) and CVE-2026-0846 (path traversal). It ships eight validation functions.

All eight consult the ENFORCE constant on line 24, which defaults to False. Under that default every gate emits a RuntimeWarning and lets the operation through instead of raising. In practice: pathsec.open('/etc/passwd') reads the file, pathsec.validate_network_url('http://169.254.169.254/...') reaches the cloud metadata endpoint, and nltk.data.load() runs pickle.loads() against an untrusted source. All with a warning nobody reads, because Python warnings vanish into the noise of any ML pipeline.

A security control that is off by default is not a security control, it is documentation. Set the environment variable to enforce.

02 Sep 2026
GitHub Security Advisory →
High

CVE-2026-81726 — NLTK: model-artifact APIs write outside allowed roots, unpatched (8.3)

NLTK's third issue in the same batch, and the most uncomfortable because there is still no patch. Even with NLTK path security enforced, several model-artifact APIs keep treating caller-controlled model paths as ordinary filenames: they use built-in open() instead of the pathsec-aware helpers.

Affected: TransitionParser.train (writes outside the root), TransitionParser.parse (reads outside the root), AveragedPerceptron.save and .load, PerceptronTagger.save_to_json, and save_maxent_params. The very same outside-root paths are correctly rejected by the guarded helpers — so the sandbox exists, these code paths simply do not use it.

Reproduced on published 3.9.4 and on current source v3.10.0-rc2. No patched version at time of writing.

02 Sep 2026
GitHub Security Advisory →
📦

Supply Chain

High

MLflow: the statsmodels flavor ignores MLFLOW_ALLOW_PICKLE_DESERIALIZATION=False and gives you RCE (8.8)

MLflow introduced MLFLOW_ALLOW_PICKLE_DESERIALIZATION as a security control to stop unsafe pickle.load during model loading — it was the answer to the CVE-2024-37052 through CVE-2024-37060 series. When you set it to False, the operator expectation is unambiguous: no pickle, full stop.

The mlflow.statsmodels flavor omits that guard entirely. The most recent fix (#21188) patched a bypass in the pyfunc flavor but never touched statsmodels. An attacker who can drop a crafted MLmodel artifact into any accessible artifact store gets arbitrary code execution in any process calling mlflow.pyfunc.load_model() against that model — with the flag set to False.

This is the textbook definition of a security control bypass: the operator believes pickle RCE is mitigated, and the flavor silently ignores the control. If you run a model registry several teams can write to, audit which flavors are enabled before you trust the flag.

01 Sep 2026
GitHub Security Advisory →
Critical

CVE-2026-62674 — Omnigent: overwriting a shared agent turns every future session into RCE (9.0)

Omnigent (Databricks) is a meta-harness running Claude Code, Codex and Pi under policies and sandboxing. The UI shows shared and template agents as not MCP-editable. But the full bundle upload endpoint, PUT /sessions/{session_id}/agent, still accepts a replacement bundle.

The permission check on that endpoint is LEVEL_EDIT on the session — that is, on your own session. An authenticated user with edit access to their session can overwrite the shared agent for everyone. By adding a stdio MCP server to that shared agent, every future runner session using it starts an attacker-controlled command.

This is internal supply chain: you did not poison an npm package, you poisoned the agent template the whole team uses. One mis-scoped permission — session-level permission authorizing a write to a shared resource — and the blast radius goes from one user to the whole organization.

02 Sep 2026
GitHub Security Advisory →
Medium

CVE-2026-71492 — Banks: the prompt registry writes wherever you say, absolute paths included (6.0)

Banks is an LLM prompt-management library. Its DirectoryPromptRegistry.set() interpolates the attacker-controllable Prompt.name into a Path expression with no canonicalization. In src/banks/registries/directory.py:44:

prompt_file = path / f"{prompt.name}.{prompt.version}.jinja"
prompt_file.write_text(prompt.raw)

Two failure modes. The obvious one: name="../victim/foo" resolves to <registry>/../victim/foo.0.jinja, outside the root. The less obvious and more interesting one: pathlib documents that Path("/a") / Path("/b") returns Path("/b"). So name="/abs/path" discards the registry root entirely — the registry is never consulted.

The detail that makes it worse: the poisoned name is persisted to index.json, so the out-of-root path keeps getting reconstructed afterwards. And the content written is a Jinja template. If your app derives the prompt name from request data, someone writes chosen bytes anywhere on your filesystem.

02 Sep 2026
GitHub Security Advisory →
🎯

LLM Attacks & Research

Research

Cyber Weapon Index: of 18 models tested, only Claude Mythos finished the full kill chain alone

Booz Allen Hamilton published the Cyber Weapon Index, a framework evaluating models' autonomous attack capability by combining vulnerability-research scores with kill-chain attainment metrics. They tested 18 models under identical conditions: nine American and nine Chinese.

Anthropic's Claude Mythos scored 80 and was the only model to complete the full cyber kill chain autonomously. With stolen credentials it achieved administrator access in every attempt, and independently identified privilege-escalation paths without following a predetermined sequence. Three others — Grok-4.5, Muse Spark 1.1 and GLM-5.2 — reached full domain access. Four achieved lateral movement. All but one gained initial network access.

The number at the top is not the finding that should worry you: «when paired with an attack harness, Claude Sonnet rivaled Claude Mythos' performance». Translated: the orchestration software amplifies as much as the model does. Your threat model cannot be anchored to which frontier model is available, because a smaller model with a good harness lands in the same place.

02 Sep 2026
The Register →
High

CVE-2026-62676 — Omnigent: the shell parser fails open, and None means allow (7.1)

Reported by Aeon, an autonomous security agent — an agent finding bugs in the harness that governs other agents. The component is omnigent/policies/builtins/_shell.py, the shared shell-command parser consumed by github.py (the write_repos/write_branches allowlist) and working_dir.py (workspace confinement).

The parser fails open. When a gated command is spelled in a way the parser does not recognize, it produces no operation; the policy evaluator returns None; and None means abstain, which is treated as ALLOW. So any command the parser misses bypasses both of the product's core safety guarantees at once: the repo/branch allowlist and the working-directory confinement.

This is the pattern you will keep seeing in agent guardrails: the policy is written as «deny what I recognize as bad», and the parser is the real attack surface. A prompt-injected agent does not need to break the policy — it only needs to spell the command in a way the parser fails to parse.

02 Sep 2026
GitHub Security Advisory →
📢

Vendor Advisories

Advisory

Google, Anthropic and OpenAI ship cybersecurity models the same day, each with its own access program

All three labs announced on the same day, and the coincidence says more than the announcements do.

Google unveiled Gemini 3.8 Flash Cyber, its most capable cybersecurity model, reachable through the new Fairwind Program: early access for governments, healthcare providers and telecoms, with over 650 partner organizations including CrowdStrike and Palo Alto Networks.

Anthropic released Claude Fable 5.1 and Claude Mythos 5.1 with differentiated safeguards: Fable 5.1 now permits vulnerability-identification work, though certain cybersecurity tasks remain restricted. It added Enterprise Frontier Safeguards, combining zero data retention with hardened safeguards, and disclosed previous unauthorized-access incidents plus extra containment measures for alignment failures.

OpenAI said its forthcoming Astra model meets the Critical cybersecurity capability threshold: it detects and exploits zero-days independently, shows much higher arbitrary code-execution rates than its predecessors, and found previously unknown vulnerabilities during testing. Release will be controlled through the Daybreak Blue program.

All three describe the same thing: real offensive capability, delivered behind a curated access gate. And Booz Allen's index from the very same day shows how little that gate protects you when the harness matters as much as the model.

02 Sep 2026
The Hacker News →
🚨

Top Incidents

Breach

GitSpawn : un .git/config hostile fait exécuter des commandes à sept agents avant toute demande

Manifold Security a publié GitSpawn, une classe de bugs touchant sept agents de code à la fois. L'astuce est ancienne et élégante : Git possède une option core.fsmonitor qui désigne une commande exécutée par Git pour savoir quels fichiers ont changé. Elle réside dans le .git/config du dépôt, donc elle voyage avec lui.

Les agents lancent git status et git diff d'eux-mêmes, en arrière-plan, sans assainir la configuration du dépôt. Résultat : la commande de l'attaquant s'exécute hors du sandbox de l'agent et AVANT toute demande d'approbation.

L'état des correctifs est inégal : goose corrigé en 1.44.0 (CVE-2026-72718), Codex CLI en 0.131.0 (CVE-2026-19592), Claude Code corrigé en 2.1.196 pour le chemin core.fsmonitor (CVE-2026-55607) — mais le chemin claude ultrareview restait non corrigé en 2.1.258. Hermes Agent, Qwen Code et Grok Build restent vulnérables.

02 Sep 2026
The Hacker News →
Breach

Unit 42 : des agents ont mené chaque étape de l'intrusion en moins de 10 heures

Unit 42 (Palo Alto Networks) a documenté une intrusion où un opérateur humain a utilisé des modèles de frontière à chaque étape de la chaîne. Durée totale : moins de 10 heures, contre environ deux semaines pour une équipe humaine.

La séquence : des agents de reconnaissance ont trouvé un endpoint d'API public vulnérable ; à l'intérieur, des agents automatisés ont cartographié les microservices internes ; des sous-agents ont ratissé les dépôts de code à la recherche de tokens et mots de passe en dur ; ces identifiants ont ouvert le gestionnaire de secrets et l'accès administrateur maître. Des «agents de pivot spécialisés» ont ensuite validé cet accès sur le cloud, l'identité, la CI/CD, les conteneurs et le SaaS.

En partant, ils ont laissé un audit de sécurité de 80 pages. Vos fenêtres de détection étaient calibrées pour des semaines de dwell time. Vous avez désormais des heures.

02 Sep 2026
The Register →
🛡️

Framework CVEs

Critique

CVE-2026-79675 — NLTK : le correctif d'injection d'arguments JVM rate le chemin par appel (9.3)

Un correctif incomplet — la pire catégorie de bug, car l'équipe croit déjà le problème résolu. Le patch de CVE-2026-12841 avait ajouté _validate_java_options() dans nltk/internals.py pour bloquer les drapeaux JVM dangereux : -agentlib, -javaagent, -Xrunjdwp et les références @argfile.

Le souci : cette validation ne s'applique qu'aux options globales via config_java(). La fonction java() accepte aussi un paramètre options par appel, ajouté par le PR #3683 (lui-même le correctif de CVE-2026-12615), qui transmet les options directement à subprocess.Popen sans validation. Les quatre classes wrapper Stanford passent toutes par là. CVSS v4 9.3, v3 9.8.

01 Sep 2026
GitHub Security Advisory →
Élevé

CVE-2026-62388 — NLTK : pathsec par défaut à ENFORCE=False, il ne fait qu'avertir (8.7)

Le module pathsec.py de NLTK existe parce qu'il était le correctif de deux vulnérabilités réelles : CVE-2024-39705 (exécution de code via pickle) et CVE-2026-0846 (path traversal). Il embarque huit fonctions de validation.

Toutes consultent la constante ENFORCE ligne 24, dont la valeur par défaut est False. Avec ce défaut, chaque garde émet un RuntimeWarning et laisse passer l'opération : pathsec.open('/etc/passwd') lit le fichier, validate_network_url() atteint l'endpoint de métadonnées cloud, et nltk.data.load() exécute pickle.loads() sur une source non fiable.

Un contrôle de sécurité désactivé par défaut n'est pas un contrôle, c'est de la documentation.

02 Sep 2026
GitHub Security Advisory →
Élevé

CVE-2026-81726 — NLTK : les API d'artefacts de modèle écrivent hors des roots autorisés (8.3)

Troisième problème NLTK du même lot, et le plus gênant car aucun correctif n'existe encore. Même avec la sécurité de chemins activée, plusieurs API d'artefacts de modèle traitent les chemins contrôlés par l'appelant comme de simples noms de fichiers : elles utilisent open() natif au lieu des helpers pathsec.

Concernés : TransitionParser.train et .parse, AveragedPerceptron.save et .load, PerceptronTagger.save_to_json, save_maxent_params. Les mêmes chemins hors root sont pourtant rejetés par les helpers protégés.

Reproduit sur la 3.9.4 publiée et sur les sources v3.10.0-rc2. Aucune version corrigée à ce jour.

02 Sep 2026
GitHub Security Advisory →
📦

Supply Chain

Élevé

MLflow : le flavor statsmodels ignore MLFLOW_ALLOW_PICKLE_DESERIALIZATION=False et donne un RCE (8.8)

MLflow a introduit MLFLOW_ALLOW_PICKLE_DESERIALIZATION pour bloquer le pickle.load non sûr au chargement des modèles — la réponse à la série CVE-2024-37052 à CVE-2024-37060. Mis à False, l'attente de l'opérateur est claire : plus de pickle.

Le flavor mlflow.statsmodels omet complètement cette garde. Le correctif le plus récent (#21188) avait corrigé un contournement dans le flavor pyfunc sans toucher à statsmodels. Un attaquant capable de déposer un artefact MLmodel forgé dans un artifact store accessible obtient l'exécution de code arbitraire dans tout processus appelant mlflow.pyfunc.load_model().

C'est la définition manuelle d'un contournement de contrôle de sécurité.

01 Sep 2026
GitHub Security Advisory →
Critique

CVE-2026-62674 — Omnigent : écraser un agent partagé transforme chaque session future en RCE (9.0)

Omnigent (Databricks) est un méta-harness exécutant Claude Code, Codex et Pi sous politiques et sandboxing. L'UI présente les agents partagés et templates comme non éditables par MCP. Mais l'endpoint d'upload complet du bundle, PUT /sessions/{session_id}/agent, accepte toujours un bundle de remplacement.

Le contrôle de permission porte sur LEVEL_EDIT de la session — donc de votre propre session. Un utilisateur authentifié peut écraser l'agent partagé pour tout le monde. En y ajoutant un serveur MCP stdio, chaque future session runner démarre une commande contrôlée par l'attaquant.

C'est de la supply chain interne : on n'empoisonne pas un paquet npm, on empoisonne le template d'agent de toute l'équipe.

02 Sep 2026
GitHub Security Advisory →
Moyen

CVE-2026-71492 — Banks : le registre de prompts écrit où vous voulez, chemins absolus compris (6.0)

Banks est une bibliothèque de gestion de prompts LLM. Son DirectoryPromptRegistry.set() interpole Prompt.name, contrôlable par l'attaquant, dans une expression Path sans canonicalisation, dans src/banks/registries/directory.py:44.

Deux modes de défaillance. L'évident : name="../victim/foo" sort du root. Le moins évident : pathlib documente que Path("/a") / Path("/b") renvoie Path("/b"), donc name="/abs/path" écarte totalement le root du registre.

Pire : le name empoisonné est persisté dans index.json, et le contenu écrit est un template Jinja.

02 Sep 2026
GitHub Security Advisory →
🎯

LLM Attacks & Research

Recherche

Cyber Weapon Index : sur 18 modèles testés, seul Claude Mythos a bouclé la kill chain complet

Booz Allen Hamilton a publié le Cyber Weapon Index, un cadre évaluant la capacité d'attaque autonome des modèles en combinant recherche de vulnérabilités et progression dans la kill chain. 18 modèles testés dans des conditions identiques : neuf américains, neuf chinois.

Claude Mythos d'Anthropic a obtenu 80 et fut le seul à boucler la kill chain complète de façon autonome, obtenant l'accès administrateur à chaque tentative avec des identifiants volés. Trois autres — Grok-4.5, Muse Spark 1.1 et GLM-5.2 — ont atteint l'accès domaine complet.

Le constat le plus inquiétant : «associé à un harness d'attaque, Claude Sonnet rivalisait avec Claude Mythos». Le logiciel d'orchestration amplifie autant que le modèle lui-même.

02 Sep 2026
The Register →
Élevé

CVE-2026-62676 — Omnigent : le parseur shell échoue ouvert, et None signifie autoriser (7.1)

Signalé par Aeon, un agent de sécurité autonome — donc un agent trouvant des bugs dans le harness qui gouverne d'autres agents. Le composant est omnigent/policies/builtins/_shell.py, le parseur de commandes partagé par github.py (allowlist write_repos/write_branches) et working_dir.py (confinement au workspace).

Le parseur échoue ouvert. Quand une commande gatée est écrite d'une façon non reconnue, aucune opération n'est produite ; l'évaluateur renvoie None ; et None vaut abstention, traitée comme ALLOW. Toute commande manquée contourne donc les deux garanties centrales du produit.

Le motif à retenir : la politique dit «refuser ce que je reconnais comme mauvais», et le parseur est la vraie surface d'attaque.

02 Sep 2026
GitHub Security Advisory →
📢

Vendor Advisories

Avis

Google, Anthropic et OpenAI sortent des modèles cyber le même jour, chacun avec son programme d'accès

Les trois laboratoires ont annoncé le même jour, et la coïncidence en dit plus que les annonces.

Google a dévoilé Gemini 3.8 Flash Cyber, accessible via le nouveau Fairwind Program : accès anticipé pour gouvernements, santé et télécoms, avec plus de 650 organisations partenaires dont CrowdStrike et Palo Alto Networks.

Anthropic a sorti Claude Fable 5.1 et Claude Mythos 5.1 avec des garde-fous différenciés : Fable 5.1 autorise désormais l'identification de vulnérabilités. S'y ajoutent les Enterprise Frontier Safeguards, combinant rétention zéro et garde-fous renforcés, ainsi que la divulgation d'incidents d'accès non autorisé antérieurs.

OpenAI annonce que son futur modèle Astra atteint le seuil de capacité cyber Critique : il détecte et exploite des zero-days de façon autonome. Diffusion contrôlée via le programme Daybreak Blue.

Tous décrivent la même chose : une capacité offensive réelle derrière une porte d'accès curée.

02 Sep 2026
The Hacker News →