Dans les fichiers de configuration de curl, une complétude de Turing est accidentellement réalisée.

Il a été découvert qu'il est possible de créer n'importe quelle fonction calculable en utilisant des constructions dans les fichiers de configuration de l'utilitaire Curl. Cette caractéristique n'apparaît que dans les versions de Curl de 8.12 à 8.16 et est due à une implémentation non intentionnelle de la complétude de Turing, permettant de créer des machines de Turing en utilisant la capacité d'extraire des plages d'octets à partir des valeurs des variables et une profondeur d'imbrication illimitée lors de la connexion de fichiers de configuration externes.

À titre d'exemple, une simulation de fonctionnement d'une machine à registres à deux compteurs (machine de Minsk) pour l'addition de nombres et la mise en œuvre du programme « 99 bouteilles de bière », utilisé pour apprendre à travailler avec des boucles, a été réalisée à l'aide de Curl. Pour exécuter le programme, programmé via des fichiers de configuration curl, il suffit de décompresser l'archive et de lancer la commande « curl -q -s -K 99_bottles/main.conf ».

La machine à registres est simulée en représentant la valeur du compteur sous forme d'une chaîne de « n » caractères « x ». Les opérations d'incrémentation et de décrémentation sont réalisées par concaténation et troncation de chaînes (synthaxe « [0-0] » pour laisser le premier octet et « [1-] » pour laisser tout le contenu sauf le premier octet), tandis que les transitions entre états sont gérées par la directive « expand-config », qui charge dynamiquement le fichier de configuration suivant, utilisant son nom comme étiquette de transition. L'opération INC(R) dans la machine à registres est réalisée comme ‘expand-variable = « r={{r}}x »‘ dans le fichier de configuration Curl, DEC(R) — comme ‘expand-variable = « r[1-]={{r}} »‘, et JMP(S) — comme ‘expand-config = « S.conf »‘. Par exemple, le code pour calculer 2 + 3 :

En pratique, les capacités de calcul mises en œuvre via des fichiers de configuration sont limitées par la taille de la pile, car chaque étape d'exécution du programme nécessite le chargement d'un nouveau fichier de configuration imbriqué. Avec une pile de 8 Mo, le dépassement de pile survient après environ 922 étapes. Les capacités sont également influencées par une limite sur la taille des variables exposées (le paramètre MAX_EXPAND_CONTENT est fixé à 10 Mo) et une forte consommation de mémoire due à la conservation de toutes les anciennes versions des variables.

Bien que la possibilité identifiée ne soit pas une vulnérabilité dans les versions à partir de curl 8.17, le truc en question ne fonctionnera plus en raison d'une limite de profondeur d'imbrication des fichiers de configuration de 5 niveaux pour se protéger contre la récursion infinie.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster