CVE-2023-49103
Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
Resumen
O app graphapi do ownCloud Server incluía, por causa de uma dependência de terceiros (biblioteca microsoft/microsoft-graph), um script de teste esquecido — GetPhpInfo.php — que expõe phpinfo() sem qualquer autenticação. Em instalações Docker, o phpinfo() vaza todas as variáveis de ambiente do container, o que pode incluir a senha do admin, credenciais de e-mail e chave de licença. O CVSS 10.0 reflete corretamente o pior caso (comprometimento total sem autenticação), mas o impacto real depende de o ambiente ser containerizado e ter esses segredos passados via variável de ambiente — em deployments tradicionais (não-Docker) o vazamento existe, porém é 'apenas' informação de configuração do PHP, não credenciais administrativas.
Detalle técnico
A causa é CWE-200 (exposição de informação sensível). O app graphapi empacotava, dentro do seu diretório vendor, um arquivo de teste da biblioteca oficial da Microsoft para a Graph API: owncloud/apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php. Esse arquivo nunca deveria ter ido para produção — ele simplesmente chama phpinfo() e foi publicado dentro do webroot, acessível via URL direta.
phpinfo() despeja, entre outras coisas, a seção 'Environment Variables' do processo PHP-FPM/Apache. Em imagens Docker do ownCloud (a partir de fevereiro de 2023), segredos como a senha inicial do admin, credenciais SMTP e a chave de licença eram injetados no container via variáveis de ambiente — exatamente o bloco que o phpinfo() expõe. Containers Docker anteriores a fevereiro de 2023 não usavam esse padrão de injeção de segredos por env var, por isso o fornecedor os classifica como não vulneráveis a essa exposição de credenciais específica (o phpinfo() ainda fica acessível, mas sem esses segredos).
O ponto crítico do advisory é que o vazamento não depende do app graphapi estar habilitado: o arquivo continua residindo em disco e sendo servido pelo webserver independentemente do estado do app no ownCloud. Desabilitar o app pela interface administrativa não remove o arquivo do filesystem — a única remediação real é deletar o arquivo ou corrigir a versão do app que o remove do pacote.
Cómo se explota
O vetor é uma requisição HTTP GET não autenticada diretamente ao path do arquivo (owncloud/apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php), sem necessidade de sessão, token ou qualquer interação do usuário — daí AV:N/AC:L/PR:N/UI:N no vetor CVSS. Não há pré-condição de configuração além de a instância estar rodando uma versão vulnerável do app graphapi com o arquivo presente e acessível pelo servidor web.
O resultado prático varia com o ambiente: em containers Docker que injetam segredos via variáveis de ambiente, o atacante lê a resposta e extrai texto em claro com senha de admin, credenciais de e-mail e chave de licença — o que normalmente leva a takeover completo da instância (login administrativo) e possivelmente pivô para o serviço de e-mail. Em instalações sem esse padrão de configuração, o atacante ainda obtém informações detalhadas de path do sistema, versão de PHP, módulos carregados e configurações — úteis para reconhecimento e encadeamento com outras falhas.
A CVE está no catálogo KEV da CISA (adicionada em 2023-11-30, com prazo de correção federal em 2023-12-21), o que confirma exploração ativa observada, e existem módulo Metasploit, template Nuclei e PoC públicas — a barreira técnica para exploração é mínima; é essencialmente um scanner batendo em um path fixo.
Versiones
Cómo protegerse
A correção do fornecedor é atualizar o app graphapi para a versão 0.2.1 (branch 0.2.x) ou 0.3.1 (branch 0.3.x), que remove o arquivo problemático do pacote. Se a atualização automática do app não for imediata, o paliativo direto e recomendado pelo próprio fornecedor é deletar manualmente o arquivo owncloud/apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php do filesystem — essa ação por si só neutraliza o vetor, independente da versão instalada.
Desabilitar o app graphapi pela administração NÃO mitiga a falha — esse é o mito que o próprio advisory desmente explicitamente, já que o arquivo permanece acessível no disco e servido pelo webserver mesmo com o app desativado. Depois de aplicar a correção ou remover o arquivo, o fornecedor recomenda rotacionar todos os segredos potencialmente expostos: senha do admin do ownCloud, credenciais do servidor de e-mail, credenciais de banco de dados e access-key de Object-Store/S3, independentemente de haver evidência concreta de exfiltração — a exposição pode ter ocorrido silenciosamente.
O fornecedor também informou ter desabilitado a função phpinfo nas próprias imagens Docker oficiais como hardening adicional. Ambientes que usam ownCloud Server 10 abaixo de 10.13.3 devem considerar essa atualização de qualquer forma, pois o mesmo ciclo de release tratou outras CVEs relacionadas (CVE-2023-49104, CVE-2023-49105) publicadas junto com esta.
Cómo detectar
O sinal mais direto é a presença, nos logs de acesso do webserver, de requisições GET (ou HEAD) para o path .../apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php — especialmente vindas de IPs não associados a usuários legítimos e sem cookies de sessão válidos, já que a exploração não requer autenticação. Respostas HTTP 200 com corpo grande (a saída completa do phpinfo()) para esse path confirmam exposição bem-sucedida.
Como há módulo Metasploit, template Nuclei e PoC públicas em circulação, é razoável esperar tráfego de scanners automatizados testando esse path em massa contra qualquer instância exposta à internet — não apenas ataques direcionados. Não há um IOC pós-exploração confiável no lado do ownCloud (a leitura do phpinfo não deixa rastro além do próprio acesso), então a defesa depende inteiramente de monitorar o acesso ao arquivo antes que ele seja removido.