security-review (everything-claude-code)
Revisa autenticación, entradas del usuario, secretos, endpoints de API y pagos con una lista de seguridad.
ECC security-review: no es mejor encontrando vulnerabilidades plantadas que Codex sin más, con aproximadamente los mismos tokens
Codex CLI · gpt-6-astra
24.9 / 30
Mejora frente a sin skill: -0.16 · Según el caso · 18 ejecuciones
Según el caso: la mejora -0.16 está por debajo de +1.0. Para ser recomendada hace falta un total de 22/30, una calidad de salida de 3.5 y una mejora de +1.0.
SOTA
AprobadaProbada con Codex.
Cubre Codex, Claude Code
Codex CLI 0.166 (nivel SOTA): 18 ejecuciones puntuadas. Una pasada aquí también cubre Claude Code según nuestra regla de niveles; no dice nada sobre el segundo nivel.
Puntuaciones
Cada dimensión va de 0 a 5 y las seis suman el total sobre 30. 5 es mejor en todas las dimensiones. Coste 5 significa barato y rápido. Instalación 5 significa fácil.
- Fiabilidad de activación
- 5.0
- Mejora frente a sin skill
- 1.8
- Calidad de salida
- 4.1
- Coste en tokens y tiempo
- 5.0
- Instalación y portabilidad
- 4.0
- Seguridad
- 5.0
Revisión de seguridad
SeguraEscaneo estático: 5 CRITICAL / 6 HIGH / 4 MEDIUM. Revisión manual: Segura para ejecutar en un sandbox sin red (hallazgos del escáner explicados). Un escaneo limpio no demuestra que una skill sea segura.
Instalar
npx skills@latest add affaan-m/everything-claude-code --skill security-review
Commit fijado: b38be6a7f6350964d59328b52f0624e1d1d552d1
Probada: 2026-11-02
Qué probamos
- Revisar un módulo de servicio pequeño — Revisa la seguridad de orders_service.py antes de que lo fusione. Enumera los problemas que encuentres, del más grave al menos grave. No cambies ningún archivo.
- Revisar un helper de autenticación — Revisa la seguridad de auth_handlers.py: acabo de escribirlo para nuestro flujo de inicio de sesión. Enumera los problemas, del más grave al menos grave. No cambies ningún archivo.
- Revisar endpoints de subida — Revisa la seguridad de upload_api.py. Enumera las vulnerabilidades, de la más grave a la menos grave. No cambies ningún archivo.
Ventajas
- La skill se activó sin nombrarla: se leyó el archivo de la skill en 6/6 ejecuciones con skill.
- Sin sobrecoste de tokens: 1.03x los tokens de sin skill.
Inconvenientes
- Sin mejora medible frente a sin skill (-0.16, dentro del ruido).
- Un prompt de una frase obtuvo 4.29, frente a 4.06 con la skill (-0.23).
- Salvedad de la prueba: la tarea t1 contiene tres elementos plantados que no son problemas de seguridad, lo que limita el mejor recuperación posible a cerca de 3.1.
- n=2 por tarea y rama; las diferencias de menos de aproximadamente 1 punto son ruido.
Reseña
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en una máquina de prueba Mac, con un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales en cada ejecución, la skill instalada (grupo con skill), sin ella (control) o sin ella pero con el requisito central de la skill comprimido en una frase añadida al prompt (grupo del prompt de una frase), 2 ejecuciones por grupo y tarea, red desactivada y escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo la formulación indicada más abajo). Tres archivos pequeños con 8 problemas plantados cada uno (un módulo de servicio, un helper de autenticación, endpoints de subida) y una petición de solo lectura: «enumera los problemas, del más grave al menos grave». El servicio de pedidos incluye tres problemas que no son fallos de seguridad (un límite off-by-one, una fuga de recursos, dinero en float), que se espera que una revisión de seguridad omita; por eso, en esa tarea un revisor de seguridad puede encontrar como máximo 5 de 8 y la puntuación máxima ronda 3.1.
Comparación de tres ramas
| Rama | Puntuación media (0-5) | Tokens por ejecución |
|---|---|---|
| Sin la skill | 4.22 | 60k |
| Prompt de una frase | 4.29 | 44k |
| Con la skill | 4.06 | 62k |
Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 24.9 / 30, veredicto Según el caso.
Aviso: La tarea t1 contiene tres elementos plantados que no son problemas de seguridad, lo que limita la mejor recuperación posible a cerca de 3.1.
Veredicto: Según el caso (24.9 / 30). Fuente: affaan-m/everything-claude-code, skills/security-review, fijada en el commit b38be6a. Instalación: npx skills@latest add affaan-m/everything-claude-code --skill security-review. Licencia: MIT (LICENSE del repositorio).
Qué es
La skill security-review de affaan-m/everything-claude-code (ECC): una lista de comprobación de seguridad para cuando añades autenticación, manejas entrada de usuario, trabajas con secretos, creas endpoints de API o implementas pagos. Unas 1,800 palabras de Markdown en SKILL.md (gestión de secretos, validación de entrada, inyección SQL, autenticación y autorización, XSS, CSRF, limitación de tasa, exposición de datos sensibles, seguridad de dependencias, con breves ejemplos de código bueno/malo y una lista de comprobación previa al despliegue) y un archivo Markdown adicional sobre seguridad de infraestructura en la nube. Sin scripts.
Cómo lo probamos
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un Mac de pruebas, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al final del prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo la formulación indicada abajo).
Tres archivos pequeños con 8 problemas sembrados cada uno (un módulo de servicio, un helper de autenticación, endpoints de subida) y una petición de solo lectura: «enumera los problemas, de más grave a menos». El servicio de pedidos incluye tres problemas que no son fallos de seguridad (un error de límite por uno, una fuga de recursos, dinero en coma flotante), que se espera que una revisión de seguridad omita, así que en esa tarea un revisor de seguridad puede encontrar como máximo 5 de 8 y la puntuación llega como mucho a cerca de 3.1.
- Revisar un módulo de servicio pequeño — Revisa la seguridad de orders_service.py antes de fusionarlo. Enumera los problemas que encuentres, de más grave a menos. No cambies ningún archivo.
- Revisar un helper de autenticación — Revisa la seguridad de auth_handlers.py: acabo de escribirlo para nuestro flujo de inicio de sesión. Enumera los problemas, de más grave a menos. No cambies ningún archivo.
- Revisar endpoints de subida — Revisa la seguridad de upload_api.py. Enumera las vulnerabilidades, de más grave a menos. No cambies ningún archivo.
La puntuación es programática (pruebas ocultas / detección de problemas sembrados / comprobaciones de restricciones / renderizado+OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.
Resultados
La frase única que recibió el tercer grupo: "Comprueba el código contra una lista de seguridad: secretos incrustados, entrada sin validar, inyección SQL/de comandos, autenticación y autorización rotas, subidas de archivos inseguras, datos sensibles en errores o registros y falta de limitación de tasa, citando la línea exacta de cada hallazgo."
| Tarea | Puntuación del control | Frase única | Con la skill | Tokens del control | Tokens de una frase | Tokens con la skill | Skill leída |
|---|---|---|---|---|---|---|---|
| t1-orders | 2.89 | 3.12 | 2.42 | 60k | 44k | 72k | 2/2 |
| t2-auth | 4.77 | 5.0 | 4.77 | 59k | 44k | 61k | 2/2 |
| t3-upload | 5.0 | 4.77 | 5.0 | 59k | 44k | 51k | 2/2 |
Puntuación media: 4.22 sin vs 4.06 con la skill (delta -0.16). Tokens por ejecución: 60k vs 62k (1.03x); tiempo 38s vs 44s. Grupo de una frase: 4.29 (ganancia de la skill sobre la frase única: -0.23; ganancia de la frase única sobre sin skill: +0.08); tokens de la frase única 44k por ejecución, así que la skill cuesta 1.40x la frase única.
Qué ocurrió
- Ninguna ganancia. Puntuación media 4.22 sin la skill, 4.29 con una lista de seguridad en una frase, 4.06 con la skill. Detección de problemas sembrados: 4.8 de 8 por ejecución sin la skill, 4.9 con la frase única, 4.5 con la skill.
- La skill fue algo peor en la tarea del servicio de pedidos: 2.4 de media frente a 2.9 del control y 3.1 de la frase única (2 y 3 puntos sembrados encontrados por ejecución, frente a 3-4 de los otros). Eso está dentro del ruido con n=2.
- En el helper de autenticación y en los endpoints de subida, todos los grupos encontraron 7 u 8 de 8 problemas sembrados; ambos son fallos clásicos de manual (md5, path traversal, pickle, inyección de comandos) que Codex a secas ya conoce.
- La skill se lee en 6/6 ejecuciones. Cuesta 62k tokens por ejecución frente a 60k (1.03x) y 44k con la frase única (1.41x): las ejecuciones de la frase única fueron las más baratas, porque leen menos antes de responder.
- Una salvedad de puntuación: los puntos se comparan con expresiones regulares, así que un hallazgo formulado de otra manera puede contar como no detectado.
Puntuaciones por dimensión
| Dimensión | Puntuación | Motivo |
|---|---|---|
| 1. Calidad del resultado | 4.06 | Puntuación media 4.06/5 con la skill (comprobaciones programáticas; consulta la tabla por tarea). |
| 2. Mejora frente a no usar skill | 1.84 | -0.16 puntos frente a 4.22 sin la skill (n=2 por tarea; menos de ~1 punto es ruido). |
| 3. Activación | 5.0 | Archivo de la skill leído en 6/6 ejecuciones de tratamiento. |
| 4. Portabilidad de las instrucciones | 4 | Lista de comprobación en Markdown simple, con ejemplos sobre todo de JS/TS y Supabase; se aplica a otros stacks solo por analogía. |
| 5. Eficiencia | 5 | 1.03x tokens (62k vs 60k por ejecución) y 1.17x tiempo (44s vs 38s). |
| 6. Seguridad e higiene | 5 | Solo Markdown; los aciertos del escáner son ejemplos de código (process.env, fetch, cadenas de plantilla) dentro de la lista. |
Límites de esta prueba
- Tres revisiones pequeñas de un solo archivo con fallos de manual; no se sembraron problemas más sutiles (autorización de lógica de negocio, condiciones de carrera, cadena de suministro).
- No se ejercieron la lista de infraestructura en la nube ni la de comprobación previa al despliegue de la skill: no había archivos de infraestructura en la prueba.
- Solo detección; no se puntuaron los falsos positivos ni la calidad del consejo de corrección.
- n = 2 por grupo y tarea: las diferencias de menos de 1 punto son ruido.
- La puntuación basada en reglas mide lo que las comprobaciones pueden ver; no puede juzgar el gusto ni si un resultado es el mejor posible.
Seguridad
Consulta security.md. Escaneo: 5 CRITICAL / 6 HIGH / 4 MEDIUM. Veredicto: seguro para ejecutar (sandbox sin red). Un escaneo limpio no demuestra que una skill sea segura.
En resumen
Una lista razonable, pero Codex a secas ya encuentra las mismas vulnerabilidades de manual, y una frase que enumere las mismas categorías lo hizo igual de bien con alrededor del 70% de los tokens. La skill no añade nada medible en este tipo de revisión de código; puede servir como prompt para un equipo que quiera una lista de comprobación coherente.
Transcripción
Registro de ejecuciones: security-review (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Columnas: tarea, grupo-ejecución, puntuación (0-5), tokens, segundos, comprobaciones superadas, archivos de la skill que abrió el agente. t1-orders control-1: puntuación 3.12, tokens 60493, s 36.1, comprobaciones 1/2, no abrió nada t1-orders control-2: puntuación 2.66, tokens 60831, s 41.9, comprobaciones 1/2, no abrió nada t1-orders oneliner-1: puntuación 3.12, tokens 44382, s 32.3, comprobaciones 1/2, no abrió nada t1-orders oneliner-2: puntuación 3.12, tokens 44393, s 35.0, comprobaciones 1/2, no abrió nada t1-orders treatment-1: puntuación 2.19, tokens 73335, s 69.3, comprobaciones 1/2, abrió security-review t1-orders treatment-2: puntuación 2.66, tokens 72383, s 54.7, comprobaciones 1/2, abrió security-review t2-auth control-1: puntuación 4.53, tokens 59839, s 37.6, comprobaciones 2/2, no abrió nada t2-auth control-2: puntuación 5.0, tokens 59894, s 37.4, comprobaciones 2/2, no abrió nada t2-auth oneliner-1: puntuación 5.0, tokens 44259, s 36.9, comprobaciones 2/2, no abrió nada
18 ejecuciones, 3 artefactos
Resultado de ejemplo
SOTA · With the skill: final message (t1-orders, run 1, Codex)
Found six security issues, ordered by severity. Exposure depends on how callers expose these functions; no caller code was provided. 1. **High — SQL injection** — [orders_service.py:9](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:9) `order_id` is interpolated directly into SQL. An input such as `0 OR 1=1` bypasses the intended lookup condition; crafted `UNION` queries could extract other database data. Bind `order_id` as a parameter. 2. **High — Missing cancellation authorization** — [orders_service.py:13](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:13) `current_user` is never used. Anyone able to invoke this function can cancel another user’s order by supplying its ID. Enforce ownership or an authorized administrative role before updating it. 3. **High — Arbitrary file overwrite through exports** — [orders_service.py:39](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:39) `open(path, "w")` immediately truncates any accessible target and follows symlinks. If callers control `path`, they can overwrite files with the service’s permissions—even before the query succeeds. Use server-generated filenames within a controlled export directory and prevent traversal and symlink escapes. 4. **High — Cross-user order export** — [orders_service.py:40](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:40) The export accepts any `user_id` without checking the requester’s identity or permissions. A caller can export another customer’s records. Derive the user ID from authenticated context and explicitly authorize administrative exports. 5. **High if valid — Embedded payment credential and credential logging** — [orders_service.py:4](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:4), [orders_service.py:48](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:48) A live-looking API key is embedded in source and would be printed after successful gateway calls. Its validity is unverified; the current gateway stub always raises. If real, rotate it, load its replacement from secret storage, and remove credential logging. 6. **Medium — Untrusted payment values lack validation** — [orders_service.py:31](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:31), [orders_service.py:45](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:45) Totals trust supplied prices and quantities, while `charge` accepts an amount without matching it to the stored order. If client-controlled, these permit manipulated totals or underpayment. Retrieve authoritative prices, validate quantities and amounts, and compute the charge server-side. No files were changed. This was a static review; the sandbox blocked the attempted in-memory verification.