Um arquivo de modelo de 65 bytes pode interromper abruptamente o popular mecanismo de inferência Llama CPP. O payload minúsculo aciona uma divisão por zero dentro do parser, produzindo um crash SIGFPE.
Por que o crash é importante
O que deu errado
O parser lê os metadados do modelo em estruturas C++ e verifica se cada dimensão do tensor é “não negativa”. O zero satisfaz essa condição, portanto, a verificação passa. A linha de código seguinte utiliza então a dimensão como divisor em um cálculo que assume que o valor é positivo. Quando a dimensão é zero, a divisão lança uma exceção de ponto flutuante (SIGFPE) e encerra o programa.
A validação cobriu apenas metade da invariante necessária: ela bloqueou valores negativos, mas ignorou o zero, que é igualmente inseguro para a aritmética subsequente.
O que os desenvolvedores devem fazer
- Trate arquivos de modelo como binários. Carregar um modelo faz o parsing de bytes brutos em estruturas de memória, um limite clássico onde dados não verificados podem derrubar o processo ou algo pior.
- Evite verificações parciais. Uma condição que cobre apenas parte da invariante necessária gera uma falsa sensação de segurança. Aqui, “não negativo” foi insuficiente; o código precisava de “positivo”.
- Questione suposições após cada verificação. Quando um teste de limites aparece, verifique se o código seguinte não depende de uma propriedade mais rigorosa.
- Utilize ferramentas de fuzzing. O autor descobriu o bug ao executar o libFuzzer com AddressSanitizer, que muta entradas e sinaliza operações ilegais, como a divisão por zero.
Como a correção foi aplicada
A correção adiciona uma guarda que pula o cálculo de overflow quando uma dimensão é igual a zero. Esse pequeno condicional preserva o suporte para tensores legítimos de tamanho zero — usados em algumas variantes de modelos para recursos opcionais — ao mesmo tempo que elimina o caminho do crash.
Conclusão: Um único arquivo de 65 bytes pode desativar um mecanismo de inferência amplamente implantado; a validação minuciosa e o fuzzing sistemático mantêm os carregadores de modelos seguros.
Fonte: https://dev.to/harrisonsec/your-model-file-is-untrusted-input-1eap
