Percebi que os navegadores Firefox e Chromium no Linux abrem o arquivo /proc/self/mem
para leitura. Nenhum outro programa em meu sistema lê este arquivo, até onde eu sei.
/proc/self/mem
é notório por ser vetor de exploits de escalonamento de privilégios sem fim, onde geralmente a memória é substituída por código malicioso e a execução do programa é sequestrada.
Isso é ainda mais triste, já que os navegadores são os programas mais expostos, com a maior superfície de ataque, porque recebem entradas não confiáveis da Internet.
Existe uma razão legítima para que os navegadores modernos precisem ler /proc/self/mem
?
Navegadores como Firefox e Chromium usam vários processos, principalmente para reduzir sua superfície de ataque. Um aspecto dessa divisão em vários processos é o tratamento de erros: se ocorrer um erro grave em um determinado processo, é melhor tratá-lo em outro processo (porque o processo travado pode não estar em um estado compatível para permitir que ele se analise e para evitar a propriedade de um processo travado).
Portanto, os navegadores mantêm os identificadores abertos para
/proc/self/mem
que possam repassá-los, permitindo que um processo de tratamento de travamento leia a memória de um processo com falha ou um processo de criação de perfil para ler a memória de um processo que está sendo analisado. Isso é usado em particular para desenrolar a pilha; consulte a documentação do Perfetto para obter detalhes (este é o desbobinador usado no Chromium).