
# Laboratório Docker para validar a primitiva de execução PHP em nível de componente do CVE-2026-75650 no Magento e o patch Adobe VULN-39341.
Este laboratório autônomo reproduz a primitiva de execução PHP em nível de componente do StyleSmuggler em um checkout do Magento Open Source 2.4.9 fixado por revisão e, em seguida, prova que o patch VULN-39341 da Adobe bloqueia a mesma entrada.
A prova é não destrutiva: o PHP incluído só pode gravar um marcador aleatório em /tmp. Ele não pode executar um comando, baixar um arquivo, abrir um callback ou aceitar um payload fornecido pelo operador.
O laboratório fornece:
755e34dd689021c5165db9d35ecff74f7dc51527;O laboratório não declara um exploit HTTP padrão não autenticado. A sonda de componente começa no modelo real de template de e-mail, portanto prova o sink perigoso e o limite do patch, não o conector ausente de rede para template. Nenhuma rota HTTP sintética é adicionada.
Use apenas em sistemas que você possui ou para os quais está explicitamente autorizado a testar. Não coloque a sonda PHP sob uma raiz web de produção. Para uma instalação real, use o validador somente leitura ou valide um clone de staging descartável.
Requisitos:
Somente o gateway da loja em modo desenvolvedor é publicado, e apenas em loopback (127.0.0.1:8096 por padrão). Um segundo gateway nginx não exposto seleciona o tratamento padrão de erros de produção, para que o teste de relatório receba o identificador normal de relatório do Magento. MariaDB, Redis, OpenSearch, PHP-FPM e esse gateway de relatório não são expostos à rede do host.
cd docker-lab
cp .env.example .env
docker compose up -d --build
docker compose logs -f php
O clone inicial do Magento, a instalação de dependências e a instalação do aplicativo normalmente levam de 15 a 40 minutos. Quando o log do PHP imprimir Ready, execute:
docker compose exec -T php bash /lab/scripts/run-ab.sh
Ou use os alvos de conveniência:
make up
make wait
make ab
O comando A/B sempre tenta deixar a origem no estado corrigido.
O teste passa somente quando ambas as metades testadas independentemente se comportam conforme o esperado:
Relatório não corrigido: raw-tag=true, guard=false
Relatório corrigido: raw-tag=false, guard=true, neutralized=true
Componente não corrigido: marker=true
Componente corrigido: marker=false
[PASS] Armazenamento de relatório e execução de componente correspondem aos controles A/B necessários.
Um HTTP 200, notificação renderizada, relatório de erro gerado ou exceção lançada não é aceito como prova de execução. As verificações de relatório e execução permanecem separadas: o sucesso conjunto delas não inventa o conector HTTP padrão não comprovado.
make vulnerable
make report # esperado: tag bruta preservada, sem guarda de execução
make probe # esperado: execution_observed=true e saída 0
make patched
make report # esperado: guarda de saída presente, tag do payload neutralizada
make probe # esperado: execution_observed=false e saída 2
make probe retornando 2 no estado corrigido é o resultado negativo esperado; make ab lida com ambos os status de saída e retorna 0 somente quando o A/B completo passa.
Esta verificação nunca inicia o Magento nem executa código da árvore montada. O contêiner não tem rede, nenhuma capability Linux, um sistema de arquivos raiz somente leitura e um mount de destino somente leitura.
make validate TARGET=/caminho/absoluto/para/magento
Veredito esperado totalmente corrigido:
Summary: 9/9 controles presentes
Verdict: FULL_CONTROL_SET_PRESENT
Qualquer coisa menor é relatada como FULL_CONTROL_SET_NOT_CONFIRMED, não automaticamente como explorável. Confirme a edição/versão exata do Commerce e aplique o patch correspondente à versão da Adobe por meio do processo de implantação suportado.
O nome mais exato é sonda de execução de código de componente somente marcador. RCE remota de ponta a ponta exige que uma solicitação remota padrão produza seu próprio marcador ou callback independente no build testado.
Consulte Notas técnicas para o fluxo de dados, os nove controles do patch e a tabela de força da prova. Os resultados exatos testados estão registrados em VALIDATION.md.
Use o boletim oficial e o patch correspondente à versão implantada:
O patch incorporado aqui é mapeado por caminho apenas para o laboratório público do monorepo 2.4.9. Não o aplique diretamente a uma instalação Composer de produção. A aplicação do patch também não remove um implante já presente nem restaura credenciais expostas.
make down # preserva volumes
make reset # exclui a origem, o banco de dados e os volumes OpenSearch deste laboratório