Communitygithub.com

SamuelStefano/dfl-day4-agente-frontsec

Auditoría de seguridad frontend (escaneo FS01–FS11, dependencias, cookies de sesión, plan priorizado). Un script determinista implementa las reglas 1–45 del README.md y escribe out/<caso>.json.

¿Qué es dfl-day4-agente-frontsec?

Este skill automatiza la auditoría de seguridad del frontend según las reglas FS01 a FS11, análisis de dependencias, cookies de sesión y generación de un plan de remediación priorizado. El script `solve.mjs` implementa las 45 reglas mecánicas del README.md de forma determinista, escaneando los archivos JS y HTML en `dist/`, detectando fugas de secretos, vulnerabilidades JWT, problemas CSP/HSTS, dependencias vulnerables, y problemas de cookies de sesión. Soporta ejecución sobre todos los casos en `casos/` o un caso específico, y produce archivos JSON en `out/`. Está diseñado para plataformas como Claude Code, Cursor, Codex y cualquier agente que ejecute Node.js. La ejecución correcta requiere no modificar archivos del workspace, solo el script en `/tmp` si es necesario corregir errores.

Compatible con~Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/SamuelStefano/dfl-day4-agente-frontsec/tree/HEAD/skills/frontsec

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Auditoría frontsec (tarea dfl/day4-frontsec-scan)

Las 45 reglas del README.md del workspace son todas mecánicas y ya están implementadas en solve.mjs, en esta carpeta. No calcules nada a mano, no decodifiques JWT ni leas cookies de cabeza. Ejecuta el script.

Paso a paso

  1. En la raíz del workspace, ejecuta:

    node .opencode/skills/frontsec/solve.mjs
    

    Lee todas las carpetas de casos/ y escribe un out/<caso>.json por caso. Para ejecutar un solo caso: node .opencode/skills/frontsec/solve.mjs ejemplo-2.

  2. Ejecuta node .opencode/skills/checar-saida/check.mjs.

  3. Si existe tests/public, ejecuta npx vitest run tests/public.

  4. Si todo pasa, detente. No edites los archivos de out/ manualmente.

Si algo falla

  • Nunca edites .opencode/, tests/, casos/, README.md ni package*.json. Un archivo modificado fuera de out/ anula la nota.

  • Para corregir el script, cópialo a /tmp y edita la copia:

    cp .opencode/skills/frontsec/solve.mjs /tmp/solve.mjs
    node /tmp/solve.mjs
    

    La copia sigue leyendo casos/ y escribiendo out/ desde la carpeta actual.

  • Lee el mensaje del test, busca en el README.md la regla que cubre ese campo y corrige solo esa función: scanLine/scanHeaders (etapa 1), dependencias (etapa 2), sessao (etapa 3), plano (etapa 4). Máximo 3 ciclos. Si no pasa, deja la mejor salida que haya generado el script.

Lo que garantiza el script (para consultar en el README si es necesario)

  • Etapa 1: recorre dist/ entero, incluyendo subcarpetas. Lee solo .js y .html, línea por línea, y los comentarios cuentan.
    • La clave solo vale en el formato exacto: pf_live_/pf_test_ + 24 o más [A-Za-z0-9], o nvm_sec_ + 32 hex. pf_pub_, nvm_pub_ y placeholder nunca cuentan.
    • JWT: el payload se decodifica en base64url. role anon o usuario es público. Cualquier otro valor, o sin role, es FS03.
    • FS04: el sink solo cuenta con la fuente escrita literalmente en el fragmento hasta el ;. FS05: el primer carácter después del ( no es comilla (backtick cuenta). FS11: el .map debe existir, resuelto desde la carpeta del .js, o ser data:.
    • CSP: vale script-src y, si no hay, default-src. Report-Only se ignora. HSTS necesita max-age ≥ 31536000.
    • Triplete repetido (regla, archivo, línea) cuenta una vez. Nota F si hay FS01 o FS03.
  • Etapa 2: resuelve como Node, subiendo node_modules, con la raíz en dependencies + devDependencies.
    • La ruta es la más corta y, en empate, la menor en orden de texto. La versión se compara numéricamente. Rango acepta ||.
    • correccion es la versión publicada más baja por encima de la instalada que no cae en ningún aviso.
    • navegador requiere el banner /*! nombre@version en un .js.
  • Etapa 3:
    • Los atributos no distinguen mayúsculas. El dominio queda sin . inicial y la ruta predeterminada viene del camino del paso.
    • Max-Age vale más que Expires. Vida ≤ 0 es eliminación.
    • Los 7 problemas salen en el orden de la lista. no_eliminado_en_logout requiere eliminación con la misma identidad en el paso logout.
  • Etapa 4:
    • Los ítems son cred:, cod:, hdr:, dep: y cookie:. FS04 y FS05 en un .js con banner de paquete vulnerable suman en dep:.
    • Las excepciones se juzgan en el orden: inexistente, luego crítico, luego vencida.
    • La prioridad es ⌊puntos × 10 ÷ esfuerzo⌋. Ordenación: prioridad, luego puntos, luego id.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados