Nos arquivos de configuração do curl, a completude de Turing foi acidentalmente implementada

Identificou-se a possibilidade de criar quaisquer funções computáveis usando construções em arquivos de configuração da ferramenta Curl. Essa característica se manifesta apenas nas versões do Curl de 8.12 a 8.16 e é causada pela implementação não intencional da completude de Turing, permitindo a criação de máquinas de Turing usando a capacidade de extrair intervalos de bytes dos valores das variáveis e uma profundidade de aninhamento ilimitada ao conectar arquivos de configuração externos.

Como exemplo, foi organizada uma simulação do funcionamento de uma máquina de registro de dois contadores (máquina de Minsk) para a soma de números e a implementação do programa '99 garrafas de cerveja', utilizado no ensino da operação com loops. Para executar o programa, programado através de arquivos de configuração do curl, basta descompactar o arquivo e executar o comando 'curl -q -s -K 99_bottles/main.conf'.

A máquina de registro é simulada através da representação do valor do contador como uma string de 'n' símbolos 'x'. As operações de incremento e decremento são implementadas através da concatenação e substring (sintaxe '[0-0]' para manter o primeiro byte e '[1-]' para manter todo o conteúdo, exceto o primeiro byte), enquanto as transições entre estados são controladas pela diretiva 'expand-config', que carrega dinamicamente o próximo arquivo de configuração, usando seu nome como rótulo da transição. A operação INC(R) na máquina de registro é implementada como 'expand-variable = "r={{r}}x"' no arquivo de configuração do Curl, DEC(R) como 'expand-variable = "r[1-]={{r}}"' e JMP(S) como 'expand-config = "S.conf"'. Por exemplo, o código para calcular 2 + 3:

Na prática, as capacidades computacionais implementadas através dos arquivos de configuração são limitadas pelo tamanho da pilha, uma vez que cada etapa da execução do programa requer o carregamento de um novo arquivo de configuração aninhado. Com uma pilha de 8 MB, a sobrecarga ocorre aproximadamente após 922 etapas. As capacidades também são influenciadas pela limitação no tamanho das variáveis que podem ser expandidas (o parâmetro MAX_EXPAND_CONTENT está definido em 10 MB) e pelo alto consumo de memória devido à retenção de todas as versões anteriores das variáveis.

Apesar de a possibilidade identificada não ser uma vulnerabilidade nas versões a partir do curl 8.17, o truque em questão já não funcionará devido à limitação da profundidade de aninhamento dos arquivos de configuração a 5 níveis para proteger contra recursão infinita.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster