Tecnología
Curl fue Turing-completo por accidente entre las versiones 8.12 y 8.16
Una combinación de variables, rangos e inclusiones recursivas hizo que curl fuera Turing-completo durante nueve meses hasta que llegó un límite.
Resumen
- Curl fue Turing-completo por accidente durante nueve meses
- Variables e inclusiones permitían simular una máquina de Minsky
- Curl 8.17 limitó la recursión y rompió esa capacidad teórica
Durante nueve meses, una combinación inesperada de funciones convirtió a curl, una de las herramientas de línea de comandos más utilizadas de internet, en algo para lo que nunca había sido diseñada: un sistema capaz, al menos en términos teóricos, de realizar cualquier cálculo que pudiera ejecutar una máquina de Turing.
La peculiaridad estuvo presente desde curl 8.12.0, publicada el 5 de febrero de 2025, hasta la llegada de curl 8.17.0 el 5 de noviembre de ese mismo año. El desarrollador Nicolas Seriot demostró que los archivos de configuración podían utilizarse para simular una máquina de Minsky de dos contadores, un modelo mínimo pero universal de computación.
No significa que curl se convirtiera en secreto en un lenguaje de programación práctico ni que alguien pudiera sustituir Python por un puñado de archivos de configuración sin perder antes la paciencia. La propiedad dependía de una idealización con memoria y recursos ilimitados. En un ordenador real había límites bastante menos filosóficos: memoria, tamaño de las variables, archivos abiertos y, finalmente, la pila del proceso.
Qué hizo a curl Turing-completo sin proponérselo
curl sirve principalmente para transferir datos mediante protocolos como HTTP y HTTPS. Es una herramienta habitual en servidores, scripts, sistemas Linux, procesos automatizados y entornos de desarrollo. Su función cotidiana queda bastante lejos de construir ordenadores universales dentro de archivos de configuración.
El comportamiento apareció por la interacción de características perfectamente razonables consideradas por separado. curl ya permitía trabajar con variables y expansiones, incorporadas en la versión 8.3.0. Con curl 8.12.0 llegó otra capacidad decisiva: seleccionar rangos de bytes al cargar el contenido de una variable.
Dos funciones inocentes que juntas cambiaron el juego
La pieza que faltaba era el sistema de archivos de configuración. Estos podían cargar otros archivos mediante la opción correspondiente y, en las versiones afectadas, no existía un límite explícito de profundidad para esa cadena de inclusiones.
Ahí apareció la combinación peculiar: las variables podían almacenar información, el troceado de cadenas permitía modificarla y los archivos de configuración podían dirigir la ejecución hacia otros archivos.
Por separado, nada especialmente exótico. Juntas, esas funciones resultaban suficientes para construir las operaciones básicas de un modelo de computación universal.
Una máquina de Minsky escondida en archivos de configuración
Seriot demostró el comportamiento utilizando una máquina de Minsky de dos contadores. Se trata de un modelo de computación extremadamente sencillo: dispone de dos registros que almacenan números y de instrucciones capaces de incrementarlos, reducirlos, comprobar si han llegado a cero y saltar a otra instrucción.
La sencillez engaña. Determinadas máquinas de dos contadores son modelos universales de computación y pueden simular una máquina de Turing. Es precisamente esa equivalencia la que permite sostener que una implementación capaz de reproducirlas es, bajo las condiciones adecuadas, Turing-completa.
Cómo se convertían letras en números
La demostración de curl utiliza una solución casi artesanal. El valor de cada contador se representa mediante una cadena formada por letras x. Un contador con valor cinco, por ejemplo, contiene cinco x.
Para incrementar el número basta con añadir otra x. Para reducirlo se elimina el primer byte mediante el sistema de rangos de las variables. Una selección del primer byte permite, a su vez, comprobar si el contador está vacío o si todavía conserva algún valor.
Los propios nombres de los archivos de configuración sirven entonces como estados del programa. Con expand-config, curl puede cargar el archivo correspondiente a la siguiente instrucción. Seriot construyó de esta forma las operaciones necesarias para incrementar, decrementar, saltar entre estados y detener la ejecución. Su prueba incluye incluso una suma de 2 + 3 realizada mediante cuatro archivos de configuración.
Dicho de otra manera: curl no recibió de repente un comando llamado programar. Sus funciones existentes permitieron montar, pieza a pieza, algo equivalente a una pequeña máquina programable. Es el tipo de resultado que suele entusiasmar a los especialistas en teoría de la computación y hacer mirar dos veces el manual al resto.
Turing-completo, sí; infinito, no
Aquí conviene introducir una precisión importante. La afirmación de que aquellas versiones de curl eran Turing-completas se sostiene bajo la abstracción habitual de recursos ilimitados. El programa real tenía límites y podía agotarlos mucho antes de ejecutar una computación particularmente ambiciosa.
Cada expansión de contenido estaba limitada a 10 millones de bytes. También existía un problema más inmediato: cada nueva instrucción de la máquina simulada requería incluir otro archivo de configuración de forma anidada. Eso consumía pila y mantenía archivos abiertos mientras la cadena continuaba.
En una prueba mínima realizada con curl 8.12 y una pila de 8 MB, Seriot consiguió ejecutar 922 pasos antes de que el proceso terminara con un fallo de segmentación. Las reasignaciones de variables añadían otra dificultad: versiones anteriores de esas variables permanecían almacenadas hasta la limpieza final, por lo que el consumo de memoria aumentaba con la duración del cálculo.
Así que la universalidad era matemática antes que práctica. Podía describirse cualquier cálculo en el modelo idealizado, pero el ordenador físico seguía teniendo la mala costumbre de disponer de memoria finita.
Curl 8.17 cerró la puerta con un límite de cinco niveles
La propiedad desapareció con curl 8.17.0, publicada el 5 de noviembre de 2025. El proyecto introdujo un máximo de cinco niveles para las inclusiones recursivas de archivos de configuración.
El código de aquella versión estableció el límite CONFIG_MAX_LEVELS en cinco niveles. El cambio buscaba detectar y evitar que un archivo de configuración pudiera incluirse recursivamente de forma indefinida.
Curiosamente, la modificación no se presentó como una solución a la inesperada capacidad computacional de curl. Su objetivo era impedir inclusiones recursivas problemáticas, y la prueba asociada comprobaba precisamente que un archivo no pudiera seguir incluyéndose a sí mismo. El límite también destruyó, de paso, la construcción de la máquina de Minsky: sin una profundidad arbitraria, ya no podían encadenarse indefinidamente sus instrucciones.
La cronología resulta especialmente llamativa. La función que completó las piezas necesarias apareció el 5 de febrero de 2025 y el límite llegó exactamente nueve meses después, el 5 de noviembre.
No fue una vulnerabilidad de seguridad
El hallazgo no describe una brecha de seguridad ni obliga a actualizar curl de emergencia. El impacto de seguridad es nulo: se trata de una propiedad teórica descubierta retrospectivamente en versiones antiguas, no de una vulnerabilidad recién encontrada que siga abierta.
curl ha continuado avanzando desde entonces. A fecha de noviembre de 2026, la versión pública más reciente es curl 8.23.0, publicada el 14 de octubre de 2026. El límite que impide aquella construcción lleva aproximadamente un año incorporado al programa.
Eso tampoco impide utilizar curl dentro de un sistema que sí sea Turing-completo. Un bucle while de Bash podría ejecutar sucesivamente configuraciones de curl y conservar el estado entre llamadas. Pero en ese caso es Bash quien proporciona el bucle ilimitado. Ya no sería curl por sí solo el responsable de la capacidad universal.
Tras publicarse el análisis, Jonathan Tremesaygues llevó la curiosidad un poco más lejos e implementó con esta técnica el clásico programa 99 Bottles of Beer, ejecutable mediante una antigua versión de curl y sus archivos de configuración. Una demostración bastante inútil para descargar una página web, pero perfectamente adecuada para probar que la rareza no era únicamente una construcción sobre el papel.
Cuando un archivo de configuración empieza a parecer un lenguaje
El caso de curl ilustra un fenómeno conocido en informática: los sistemas de configuración tienden a ganar capacidades poco a poco. Primero llegan variables. Después, transformaciones de texto e inclusiones. Luego condiciones o algún mecanismo para alterar el flujo. Ninguna función necesita ser extraordinaria por separado.
Pero las combinaciones importan. En este caso, trocear variables y encadenar configuraciones terminó proporcionando justo los ingredientes necesarios para simular un modelo universal de computación, aunque nadie hubiera diseñado curl con ese objetivo.
Durante nueve meses, una herramienta creada para mover datos por internet escondió así una peculiaridad digna de la teoría de la computación. Después bastaron cinco niveles de recursión como máximo para que desapareciera. A veces, la distancia entre un archivo de configuración y un lenguaje de programación resulta bastante menor de lo que parece.
-
NaturalezaTerremotos en España: Granada registra dos seísmos este 1 de noviembre
-
NaturalezaIncendios en España este 1 de noviembre: calma y riesgo creciente
-
MundoKast cae al 29% tras rebajar penas a 56 agresores sexuales de menores
-
EspañaAccidente de Urda: balance, víctimas y novedades cuatro días después
-
DeportesAntonelli, a dos puntos del Mundial: qué necesita en el GP de México
-
EspañaOKDiario reúne a jueces y fiscales tras pagos y apoyo ligado al PP
-
HistoriaDescubren en Caraca un templo romano de hace 2.000 años en Guadalajara
-
MundoDelcy Rodríguez abre la vía a privatizar activos públicos de Venezuela
-
MundoTres drones baratos destruyeron un T-90M ruso valorado en 4,5 millones
-
EspañaEEUU presionó a España para cambiar su voto sobre el bloqueo a Cuba
-
MundoD.C. y Virginia demandan para frenar el arco de Trump de 76 metros
-
EspañaAmplían la ayuda CUME por cáncer y enfermedad grave tras los 26 años