Failles et vulnérabilités du Web

Altcha GDPR Compliant Captcha and Bot Protection <=2.2 Multiple Vulnérabilités

Blog Failles et vulnérabilités du Web Altcha GDPR Compliant Captcha and Bot Protection <=2.2 Multiple Vulnérabilités
0 commentaire

Altcha est une alternative à reCAPTCHA centrée sur la confidentialité. Cette extension promet d’éliminer le suivi, les cookies et le fingerprinting, offrant une sécurité robuste, accessible et conforme aux réglementations mondiales sans aucun puzzle.,

Leur service se veut 100% auto-hébergé, sans aucune requête externe ni aucun partage de données. Vous trouverez cette extension en V2 sur https://github.com/altcha-org/altcha-wordpress-next/releases.

Cependant ce plugin semble présenter aussi de multiples vulnérabilités critiques qui ont été ignorés par leurs auteurs suite à mon mail informatif.

Insecure Direct Object Reference (IDOR) via Missing Nonce

Location: /includes/admin/actions.php#L31

Issue: Il n’y a aucune validation par jeton de sécurité (nonce), seulement le rôle du compte connecté, ce qui est insuffisant et qui amène de multiples failles CSRF.

Impact: Il est simple de forcer un admin à exécuter du code qui n’a besoin que d’un rôle pour se lancer.

Severity: CVSS v3.1: 3.5 (Low)

More: C’est grave de ne pas utiliser de jeton de sécurité dans une extension WordPress, à la fois le score reste bas car c’est dans son usage qu’elle pose problème, elle seule n’est pas un problème. WordPress met déjà tout en place pour les gérer nativement si on les inclus dans le formulaire de ses réglages via l’API des settings, dommage de ne pas les utiliser.

faille

N‘importe quelle IA générative nulle et gratuite comme ChatGPT est capable de détecter cette faille là


CSRF #1, #2, #3

Location: /includes/admin/actions.php#L42-91 (les 3 fonctions de « set »)

Issue: La fonction altcha_ajax_check_access() ne contenant pas de jeton de sécurité (nonce), il est donc possible de forcer un admin à valider les données de POST à son insu via un formulaire en POST caché dans une page, il suffit de lui faire visiter pour que le form soit envoyé à l’aveugle et valide les données puisqu’il est connecté et a le bon rôle (le pouvoir), mais il manque le jeton (le vouloir).

Impact: Un attaquant peut forcer un admin à modifier n’importe quelle valeur des réglages de l’extension.

Severity: CVSS v3.1: 9.5 (Very High)

More: Les réglages de l’extension incluent notamment d’ignorer le captcha selon certaines présence de cookie, ou de validation d’IP ou de chemins, de modifier la licence (pour l’invalider par exemple), de modofier le paramètre « under attack » pour le mettre  à »faux ». L’attaquant indique donc ce qui l’arrange pour outrepasser les sécurités mises en place.

csrf

csrf


Timing Side-Channel Attack on Signature Check

Location: /includes/plugin.php#L1260, 1298, 1300

Issue: Les comparaisons de hashs utilisent === au lieu de hash_equals(), ce qui est vulnérable aux attaques par timing.

Impact: Un attaquant peut brute-forcer le hash des signatures caractère par caractère.

Severity: CVSS v3.1: 3.7 (Low)

More: Les attaques par timing sur des clés comme celles-ci vont être longues et couteuses, l’exploit reste trivial, mais la faille est là.

triple equal

triple equal


Insufficient Entropy #1

Location: includes/plugin.php#L836

Issue: Le hash secret généré utilise seulement 12 bytes (=96 bits), ce qui est inférieur aux recommandations actuelles de 128 bits minimum.

Impact: Les attaques sont plus simples à réaliser notamment le timing attack et le brute force.

Severity: CVSS v3.1: 3.7 (Low)

12bytes only

12bytes only


Insufficient Entropy #2

Location: includes/plugin.php#463-473

Issue: La fonction get_edk() expose des informations sur l’IP et le User-Agent via des hash prévisibles. Elle n’inclus aucune donnée aléatoire (time() n’est pas aléatoire !)

Impact: Un attaquant peut:

  • Prédire le hash d’un autre utilisateur en connaissant son IP et User-Agent
  • Réutiliser le même hash toute la journée (temps arrondi)
  • Effectuer des attaques par collision (hash tronqué à 16 chars chacun)
  • Contourner le rate limiting basé sur EDK en générant des hash valides
  • Usurper l’identité d’un autre utilisateur dans le système de rate limiting

Severity: CVSS v3.1: 5.9 (Medium)

More: Il est vrai que développer de la crypto n’est pas aisé, on a pas en tête les bonnes façons de faire si on est pas du métier, il est possible de se faire aider par l’IA à ce niveau, donnez du contexte et le code devrait être utilisable mais à tester bien entendu.

lack entropy

lack entropy


Race Condition

Location: includes/plugin.php#1129-1170

Issue: La fonction rate_limit() utilise des transients WordPress sans verrouillage atomique, permettant des race conditions. Deux requêtes simultanées peuvent contourner le rate limit en s’exécutant entre get_transient() et set_transient(). Il manque donc le verrouillage manuel des requêtes SQL avec un seul COMMIT final.

Impact: Un attaquant peut envoyer des requêtes parallèles pour contourner les limites, et donc contourner le captcha.

Severity: CVSS v3.1: 5.3 (Medium)

race cond

race cond


IP Spoofing via X-Forwarded-For (Trust Boundary Violation)

Location: includes/plugin.php#L581-614

Issue:  L’en-tête HTTP X-Forwarded-For est utilisé pour déterminer l’adresse IP du client sans validation suffisante par défaut. Cependant, la liste trustedProxies est vide par défaut, donc la condition en ligne 605 n’est jamais exécutée…

Impact: Un attaquant peut envoyer un en-tête X-Forwarded-For=1.2.3.4 arbitraire pour usurper l’adresse IP qui sera lue, et changer au prochain call. Avec ela il peut par exemple réaliser :

  • Un contournement du Rate Limiting : L’attaquant peut changer d’IP à chaque requête pour éviter les limites
  • Un contournement du Firewall : Bypass des blocages IP (blockIps).
  • Obtenir un accès non autorisé : Usurpation d’une IP whitelistée (bypassIps).
  • Une pollution des logs : Fausses adresses IP dans l’analytics.
  • Un Bypass du mode « Under Attack » : Le hash IP (get_ip_address_hash()) peut être manipulé.

Severity: CVSS v3.1: 3.1 (Low)

More: La protection par hash IP est illusoire car l’IP utilisée pour générer le hash peut être contrôlée par l’attaquant via X-Forwarded-For. Le mode « Under Attack » perd donc son efficacité.

get ip

get ip and spoof me


Score de risque global pour toute l’extension : 5/10 (Medium)

Il est recommandé de ne pas utiliser ce plugin en production tant que ces vulnérabilités ne sont pas corrigées.

SecuPress tagge déjà cette extension comme vulnérable, Patchstack va suivre le pas, etc.

En 2025, sur un petit plugin comme ça, vous pouvez totalement vous faire aider par des IA compétentes comme CursorAI avec Opus4.5 et Sonnet4.5 (pas Composer pour l’audit de sécu, ni Gemini 3 Pro) aussi bien pour le dev, l’optimisation, la sécurité, beaucoup de ces failles auraient été évitées.

0 commentaire