Warden skill: detect unsafe URI rendering in HTML templates
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- typescript
Línea de trabajo
Comienza con PR #842 y la allow-list de sanitizeHrefURL para comprender la vulnerabilidad corregida y el manejo esperado de URI. Inspecciona las reglas existentes de Warden y la configuración de ESLint; después, determina cómo se pueden detectar los literales de plantilla o las concatenaciones que llegan a href, src o action. Se considerará terminado cuando el mecanismo de cumplimiento elegido informe de sinks inseguros no validados en todo el código base y cubra los patrones propuestos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
PR #842 fixed a stored XSS in the OAuth approval dialog where client_uri, policy_uri, and tos_uri fields were rendered as clickable href attributes without validating the URI scheme. javascript: URIs bypassed HTML escaping entirely. The fix added an allow-list (sanitizeHrefURL) restricting schemes to http/https.
This class of bug — untrusted string → href without scheme validation — is easy to miss in review and should be caught automatically via a Warden rule.
Current behavior
No static analysis or Warden rule exists to flag patterns like:
// dangerous: href value from external input without scheme validation
`<a href="${uri}">`
Gap
HTML-escaping does not protect against javascript: URIs. Any place where user-controlled or API-sourced strings are interpolated directly into href, src, or action attributes is a latent XSS vector that code review can silently miss.
Options
- Warden semgrep rule — pattern-match template literals or string concatenation that feeds into href/src/action without passing through an allow-list sanitizer. Flag for human review.
- ESLint plugin (e.g.
eslint-plugin-no-unsanitized) — enforce at lint time in CI; blocks merges rather than async Warden alerts. - Both — Warden for existing codebase sweep + ESLint for ongoing enforcement.
Recommendation
Ship a Warden rule first for a broad sweep across the codebase, then layer in an ESLint rule (or extend the existing config) so new instances are caught at PR time before merge.
Action taken on behalf of David Cramer.
- Lenguaje dominante
- TypeScript
- Estrellas
- 938
- Forks
- 166
- Merge medio
- 1 d 5 h
- PR fusionados (30 d)
- 172
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de getsentry/toolkit
-
bug MCP
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
getsentry/toolkit#1621 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug MCP
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
getsentry/toolkit#1618 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
getsentry/toolkit#1471 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
getsentry/toolkit#1632 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
getsentry/toolkit#1630 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de getsentry/toolkit
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Merit-Systems/x402scan#1312 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Native Web
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
digitalfabrik/integreat-app#4517 ·
Los mantenedores suelen responder en 2 días
-
TLS guide repeats certs/ in the certificate directoryPosiblemente ocupada @maheshrijal la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
prometheus/docs#3156 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
medusajs/dtc-starter#90 ·
Los mantenedores suelen responder en 1 día