Skip to content

Codex/security remediation sep 2026 - #779

Merged
rondinelisaad merged 2 commits into
codex/php8-rocky9-migration-pushablefrom
codex/security-remediation-sep-2026
Sep 24, 2026
Merged

rondinelisaad merged 2 commits into
codex/php8-rocky9-migration-pushablefrom
codex/security-remediation-sep-2026

Conversation

@rondinelisaad

Copy link
Copy Markdown
Member

Contexto

Este PR implementa as correções prioritárias identificadas na análise de
vulnerabilidades de setembro de 2026 e adiciona melhorias de compatibilidade
para execução do SciELO Web em Rocky Linux 9 com PHP 8.5.

Também corrige o problema em que pesquisas na interface iAH iniciavam o download
de uma resposta application/octet-stream contendo o erro
WXIS|fatal error|unavoidable|leafread/ock|.

Principais alterações

  • bloqueio de modos públicos de diagnóstico e debug;
  • validação e normalização de parâmetros recebidos pela aplicação;
  • proteção contra XSS em páginas de estatísticas e gráficos;
  • proteção contra SSRF, evitando o uso de Host e caller como destino;
  • proteção do formulário de envio de e-mail com:
    • exigência de POST;
    • token CSRF;
    • validação e limitação dos campos;
    • rate limit por endereço IP;
    • respostas sem detalhes internos do PHPMailer;
  • configuração Apache com bloqueio padrão de CGI, permitindo somente
    wxis.exe;
  • bloqueio HTTP de arquivos auxiliares, configurações e templates;
  • adequações de compatibilidade PHP 8.5 nas bibliotecas DOMIT,
    Open Flash Chart e serviços legados;
  • reconstrução dos índices derivados iAH author, search e searchp;
  • detecção e tratamento de índices ISIS legados *.iy0;
  • documentação do processo de migração e atualização das evidências da
    análise de vulnerabilidades;
  • inclusão de testes automatizados de regressão de segurança.

Validações executadas

  • lint PHP 8.5 em todos os arquivos PHP modificados;
  • testes de regressão em tests/security_regression.php;
  • validação de sintaxe do script de migração com bash -n;
  • git diff --check;
  • varredura de chaves, tokens, credenciais e strings de conexão;
  • validação da instância real de Ciência e Cultura em container;
  • validação de páginas de artigo, RSS, exportação, estatísticas e gráficos;
  • validação dos bloqueios HTTP para arquivos e CGI não autorizados;
  • pesquisa iAH por cultura, retornando 68 registros sem iniciar download;
  • validação de XSS, CSRF, SSRF e exposição de diagnóstico.

Resultado da varredura de segredos

Nenhuma chave privada, token, senha, credencial ou string de conexão real foi
encontrada nas alterações deste PR.

Pendências para homologação

Antes da implantação em produção ainda devem ser executados:

  • reteste completo em uma instância gravável de homologação;
  • teste SMTP com caixa postal sintética;
  • validação do rate limit, incluindo resposta HTTP 429;
  • validação em HTTPS e dos atributos de cookies;
  • validação dos filtros especializados iAH e reconstrução dos índices legados
    restantes, quando aplicável;
  • decisão sobre a restrição externa do wxis.exe;
  • remoção física do binário mimetex.cgi;
  • decisão sobre remoção ou modernização dos endpoints legados
    scielolog.php, scielologofi.php e sci_statart.php;
  • aprovação dos responsáveis técnico e de segurança.

Observações de implantação

A reconstrução dos índices deve ser executada primeiro em uma cópia gravável
de homologação. O modo de reparo preserva os arquivos .mst e .xrf e move
índices .iy0 antigos para backups com timestamp.

Documentação relacionada:

  • docs/security/vulnerability-assessment-2026-09.md
  • docs/rocky9-instance-migration-checklist.md

Correção do idioma padrão

Foi corrigido o fluxo de seleção de idioma para respeitar a configuração
STANDARD_LANG.

Causa

Quando a requisição não continha o parâmetro lng, classRequestVars.php
adicionava automaticamente lng=en. Como o parâmetro passava a existir, o
fallback para STANDARD_LANG nunca era executado.

Alterações

  • ausência de lng permanece representada como parâmetro ausente;
  • idiomas válidos en, pt e es são validados por allowlist;
  • valores válidos são normalizados para minúsculas;
  • idiomas inválidos são descartados e seguem para STANDARD_LANG;
  • valores não escalares, como lng[]=pt, são descartados sem causar TypeError;
  • lng e nrm são inicializados antes da geração da URL WXIS, evitando warnings
    no PHP 8.5;
  • adicionados testes de regressão para ausência, normalização, valor inválido,
    entrada em array e fallback para STANDARD_LANG=pt.

Comportamento esperado

  • /scielo.php utiliza STANDARD_LANG;
  • /scielo.php?lng=es utiliza espanhol;
  • /scielo.php?lng=PT é normalizado para pt;
  • /scielo.php?lng=invalid utiliza STANDARD_LANG;
  • /scielo.php?lng[]=pt não causa erro de tipo.

Validação

  • lint dos arquivos PHP executado com PHP 8.5;
  • suíte tests/security_regression.php aprovada;
  • git diff --check aprovado;
  • varredura de segredos aprovada.

Para validar após a implantação:

docker exec scielo grep '^STANDARD_LANG=' \
  /var/www/html/htdocs/scielo.def.php

curl -I http://127.0.0.1:8089/scielo.php
curl -I 'http://127.0.0.1:8089/scielo.php?lng=es'

@rondinelisaad
rondinelisaad merged commit 235568d into codex/php8-rocky9-migration-pushable Sep 24, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant