io_uring tornou-se uma dor de cabeça para o Google e eles decidem desativá-lo de seus produtos

io_uring

io_uring é uma interface de chamada de sistema do kernel Linux para operações de E/S assíncronas de dispositivos de armazenamento

O Google revelou recentemente por meio de uma postagem no blog que tomou a decisão de desativar por padrão no ChromeOS, Android e servidores de produção, a interface assíncrona io_uring, isso devido à deplorável situação de segurança em io_uring.

E é que durante a análise dos resultados do “Programa de Recompensas de Vulnerabilidade” do kCTF, que existe desde 2020, foi demonstrado que 60% das candidaturas recebidas no âmbito do programa exploram vulnerabilidades emergentes e a situação não muda ao longo do tempo, o que é bastante preocupante, pois tornou-se um ponto vulnerável.

No total, cerca de US $ 1 milhão em recompensas foram pagos. por façanhas relacionado a io_uring, enquanto o valor total das recompensas pagas por vulnerabilidades no kernel do Linux durante a existência da iniciativa foi de US$ 1,8 milhão para 42 exploits fornecidos para vulnerabilidades ainda não corrigidas (remuneração máxima – US$ 133 mil).

Sendo o kernel Linux um componente chave não só para a Google, mas também para a Internet, começámos a investir fortemente nesta área. Expandimos o alcance do VRP e a recompensa máxima em 2021 (para US$ 50), novamente em fevereiro de 000 (para US$ 2022) e, finalmente, em agosto de 91 (para US$ 000). Em 2022, também resumimos nossos aprendizados até o momento em nosso livro de receitas e apresentamos nossas mitigações experimentais para as técnicas de mineração mais comuns.

Ano passado, para melhorar a segurança do kernel do Linux usado no ambiente de referência em que o exploit que reivindica o prêmio foi produzido, O Google aplicou ajustes e patches adicionais para bloquear métodos típicos de exploração. Por exemplo, a proteção contra corrupção foi adicionada à estrutura Freelist, a gravação fora dos limites da placa foi proibida e os ataques de bloqueio relacionados ao compartilhamento de cache foram implementados. Mas essas mudanças não afetaram a capacidade de explorar vulnerabilidades no io_uring, o que levou o Google a parar de oferecer suporte ao io_uring em seus produtos.

Embora io_uring forneça benefícios de desempenho e reaja rapidamente a problemas de segurança com correções de segurança abrangentes (como backporting 5.15 para a árvore estável 5.10), é uma parte relativamente nova do kernel. Como tal, io_uring continua a ser desenvolvido ativamente, mas ainda é afetado por sérias vulnerabilidades e também fornece fortes explorações primitivas. Por esses motivos, atualmente o consideramos seguro apenas para componentes confiáveis.

No ChromeOS, o suporte io_uring é desativado ao compilar o kernel (CONIFG_IO_URING no kernelconfig). O Android usa temporariamente um filtro baseado em seccomp-bpf para bloquear o acesso a io_uring e planeja usar o SELinux para restringir seletivamente o acesso a io_uring a componentes confiáveis ​​do sistema em uma versão futura.

Como tal, o Google não tem uma visão negativa do interface io_uring, fornecido pelo kernel do Linux desde a versão 5.1, pois cita que entre seus pontos positivos, se destaca por seu suporte para polling de I/O e a capacidade de trabalhar com ou sem buffer, mas, como tal, ainda é robusto o suficiente para continuar correndo riscos e, acima de tudo, continuar investindo na correção de bugs e vulnerabilidades que surgem constantemente.

Com a API io_uring, os desenvolvedores do kernel tentaram resolver as deficiências da antiga interface aio.

Em termos de desempenho, io_uring está muito próximo de SPDK e supera significativamente libaio quando a votação está habilitada. Por exemplo, o uso de io_uring na biblioteca libuv resultou em um aumento de desempenho de 8x, e a inclusão do buffer de gravação assíncrono baseado em io_uring no sistema de arquivos XFS levou a uma diminuição de 80x na latência e um aumento de 2,7 vezes na transferência de dados avaliar.

Vale ressaltar que, adicionalmente, o Google está considerando a possibilidade de desabilitar io_uring por padrão no GKE AutoPilot (Google Kubernetes Engine).

Por fim, se você tiver interesse em saber mais sobre o assunto, pode consultar os detalhes no link a seguir.