ASA-2018-00070 – Linux: userfaultfd() ignora a permissão do arquivo tmpfs


For the English version of this alert, click here.

Allele Security Alert

ASA-2018-00070

Identificador(es)

ASA-2018-00070, CVE-2018-18397

Título

userfaultfd() ignora a permissão do arquivo tmpfs

Fabricante(s)

Linux foundation

Produto(s)

Linux

Versão(ões) afetada(s)

Linux desde 4.11

Versão(ões) corrigida(s)

Linux 4.14.87

Linux 4.19.7

Prova de conceito

Desconhecido

Descrição

Nas versões do kernel do Linux desde a versão 4.11, userfaultfd() pode ser usado para escrever dados arbitrários em arquivos tmpfs aos quais um atacante tem acesso somente leitura.

Detalhes técnicos

Usando a API userfaultfd, é possível primeiro registrar uma região userfaultfd para qualquer VMA que atenda vma_can_userfault(): Deve ser um VMA anônimo (->vm_ops==NULL), um VMA (VM_HUGETLB) ou um VMA shmem (->vm_ops==shmem_vm_ops). Isso significa que, por exemplo, é possível registrar as regiões do userfaulfd para mapeamentos de somente leitura compartilhados de arquivos tmpfs.

Posteriormente, a API userfaultfd pode ser usada em tal região para escrever (atomicamente) dados no mapeamento do arquivo. Essa API também funciona em mapeamentos compartilhados somente leitura.

Isso significa que um atacante com acesso somente leitura a um arquivo tmpfs pode escrever dados no arquivo.

Créditos

Jann Horn do Google Project Zero

Referência(s)

Linux kernel: userfaultfd bypasses tmpfs file permissions (CVE-2018-18397; since 4.11; fixed in 4.14.87 and 4.19.7)
https://seclists.org/oss-sec/2018/q4/219

userfaultfd: shmem/hugetlbfs: only allow to register VM_MAYWRITE vmas
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=29ec90660d68bbdd69507c1c8b4e33aa299278b1

Linux 4.14.87
https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.14.87

Linux 4.19.7
https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.19.7

Linux: userfaultfd bypasses tmpfs file permissions
https://bugs.chromium.org/p/project-zero/issues/detail?id=1700

CVE-2018-18397
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-18397

CVE-2018-18397
https://nvd.nist.gov/vuln/detail/CVE-2018-18397

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 1 fevereiro 2019