La longue histoire de POP3 comme petit démon en C analysant des entrées non fiables avant l'authentification fait de l'implémentation du serveur elle-même une surface d'attaque, surtout sur les hôtes hérités où POP3 vit encore. La cible canonique est qpopper, dont la lignée de débordements a défini la classe ; Courier (et son courier-authlib) est le suivant le plus courant, et le service POP3 de Dovecot actuel partage la surface des services auxiliaires et de SASL décrite pour son côté IMAP. Les déclencheurs pré-authentification (dans le message d'accueil, le traitement de USER/APOP ou d'AUTH) sont les prix convoités. Identifiez d'abord la version exacte, car chacun de ces bugs dépend de la version.
Identifier la version#
nc <target> 110
+OK qpopper (version 4.0.5) at mail.corp.local starting.
nmap -p110,995 -sV <target> # resolves product/version
qpopper et Courier affichent leur produit et souvent leur version dans le message d'accueil ; Dovecot est laconique, appuyez-vous donc sur -sV et les services annexes. Un jeton APOP et une chaîne de version explicite dans le message d'accueil sont tous deux de forts signaux d'un serveur plus ancien, probablement vulnérable.
qpopper#
qpopper (le démon POP3 de Berkeley/Qualcomm) est l'endroit où la lignée de débordements POP3 est la plus claire. Les versions plus anciennes contenaient des débordements de tampon sur la pile atteignables via des arguments trop longs à USER, PASS et d'autres commandes, ainsi que des problèmes de chaîne de format dans la journalisation d'entrées contrôlées par l'attaquant. Les plus notables étaient post-authentification (déclenchées après une connexion valide, ce qui compte toujours pour passer d'un compte de boîte aux lettres à faible valeur aux privilèges du démon), tandis que les débordements d'analyse de commandes dans la boucle de répartition pouvaient être atteints avec une authentification minimale ou nulle sur les versions les plus affectées. Comme qpopper s'exécutait historiquement avec des privilèges élevés pour accéder aux maildrops, un débordement réussi était une voie directe vers un privilège plus élevé sur l'hôte.
# fingerprint, then confirm which commands the version accepts pre-auth
nc <target> 110
+OK qpopper (version 4.0.5) ...
USER $(python3 -c 'print("A"*2000)') # legacy builds mishandle over-long args
Traitez la sonde à argument trop long comme un test dépendant de la version : sur une version vulnérable, elle plante ou se comporte mal, sur une version actuelle elle est rejetée proprement par -ERR.
Courier#
L'exposition de Courier-POP3 réside surtout dans l'authentification et le courier-authlib partagé, où des failles de traitement d'entrée produisaient des plantages et, dans les versions plus anciennes, une corruption mémoire pendant le traitement des identifiants. Comme pour Courier-IMAP, une bannière Courier marque un hôte vieillissant qui est généralement en retard sur ses autres services aussi, il vaut donc la peine de traiter la découverte POP3 comme un indicateur de pivot autant que comme une cible en soi.
Dovecot POP3#
Dovecot sert POP3 depuis la même base de code que son service IMAP, de sorte que la surface des services auxiliaires et de SASL est partagée : les failles d'analyse du service de stats et le traitement TLS/SNI, ainsi que le proxy de soumission, s'appliquent tous indépendamment du protocole de récupération que parle le client. Le traitement du cœur des commandes POP3 de Dovecot a été renforcé, de sorte que sur une version actuelle la valeur réside dans le même déni de service des services auxiliaires et, une fois que vous détenez un identifiant, dans le chemin d'exécution Sieve/ManageSieve (qui agit sur le courrier délivré indépendamment de la manière dont il est récupéré ensuite). Voir l'exploitation du serveur IMAP pour le détail de Dovecot.
Lignée#
L'arc reflète celui d'IMAP. Les démons POP3 des années 1990/2000 (qpopper avant tout, plus les diverses implémentations ipop3d/UW) portaient les débordements de tampon classiques pré- et post-authentification et les chaînes de format des services réseau en C analysant des commandes non fiables en s'exécutant avec privilèges. Courier se situait au milieu, avec son exposition concentrée dans la couche d'authentification. Dovecot moderne a refermé la classe de corruption mémoire du cœur du protocole, poussant la surface restante vers les services auxiliaires et vers le script de courrier post-authentification. Ainsi, quand vous identifiez un vieux qpopper ou Courier, pensez corruption mémoire pré/post-authentification et gain de privilèges ; quand vous voyez un Dovecot actuel, pensez déni de service des services auxiliaires et exécution Sieve post-authentification.