
Apache Traffic Server 10.2.0 - Alta - Remoto - Resíduo de privilégios - prefixo authproxy
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-authproxy-prefix
Classe: Resíduo de privilégio Alcance: Remoto
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
O --forward-header-prefix do authproxy copia campos de identidade de um auth helper 2xx para a requisição do cliente. HttpSetMimeHeader localiza e sobrescreve apenas o primeiro campo com esse nome. Cópias extras do cliente sobrevivem. Uma origem que aplica last-wins no mesmo cabeçalho trata o valor do cliente como identidade.
O plugin.config padrão está vazio. Este resíduo exige o plugin em um remap com a opção de prefixo. O cliente ainda precisa passar na autenticação (2xx). Auth 403 nunca chega à origem.
| ID | sem CVE ainda |
| Classe | Resíduo de privilégio (plantio de cabeçalho de identidade) |
| Alcance | Remoto (HTTP através do authproxy com --forward-header-prefix) |
| CWE | CWE-444, CWE-863 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produto | Apache Traffic Server |
| Afetado | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) overlay de prefixo do authproxy |
| Auth | cliente que já obtém um 2xx do auth helper. Plugin ativado. |
| Licença | GNU Affero GPL v3.0 |
| Lab | apenas 127.0.0.1:18760 |
Fixe a tag pública 10.2.0 peel b1df7334. O lab é um proxy reverso ats-10.2.0-lab:local compilado a partir do código-fonte em loopback. Auth helper 2xx vs 403. Origem last-wins X-Auth-User.
Alcançar um remap do ATS que carrega authproxy.so com --forward-header-prefix=X-Auth-. Enviar duas linhas X-Auth-User em uma requisição que o helper aceita como 2xx.
| Método | Sink | Privilégio |
|---|---|---|
X-Auth-User duplicado após um auth helper 2xx | overlay StateAuthorized e então HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102) | Integridade (comprovado em lab): origem last-wins. Lab: X-Auth-User-0: realuser mais X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS. CONTROLE none/single permanecem REALUSER-ONLY. |
| Mesmo plantio | ACL de origem / busca de usuário baseada nesse cabeçalho | Recon (inferido): qualquer coisa que essa identidade plantada possa ler na origem. Não é um heap dump. Não é a configuração do ATS. |
| Auth helper 403 com as mesmas duplicatas | StateUnauthorized; origem não reabilitada | Fechado (comprovado em lab): acessos à origem inalterados. Cliente 403. Witness não está no corpo. |
Comprovado em lab vs inferido: duplicata last-wins, sobrescrita única, none e 403-não-alcançado são de lab. O privilégio na origem após o plantio é inferido a partir da identidade last-wins.
Requer: authproxy.so com --forward-header-prefix. O cliente precisa passar na autenticação (2xx). A origem precisa tratar esses cabeçalhos de prefixo como identidade (a razão pela qual a opção existe). Não carregado no plugin.config padrão.
| Superfície | Laboratório |
|---|---|
| Sem cabeçalho de prefixo de cliente | CONTROL none: origem REALUSER-ONLY |
| Prefixo de cliente único | CONTROL single: primeiro campo sobrescrito; a testemunha não sobrevive |
| Auxiliar de autenticação 403 | origem não alcançada (control-403=yes) |
| Plugin não carregado | o resíduo não se aplica |
Cabeçalhos hop-by-hop / @ | removidos antes dos hooks do plugin (CVE-2026-33267) |
| Lista vazia de cabeçalhos de resposta de autenticação | já não afirma (changelog) |
SNI do certificador / url_sig C= | fechado neste pin (CVE-2026-58162 / 58181) |
Não é CVE-2026-58162. Apenas SHA-256/SHA-512 em uri_signing. O delimitador ausente em url_sig C= ainda nega.
python3 ats-authproxy-prefix-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback 127.0.0.1:18760 (origem 18761, auxiliar de autenticação 18762). Projeto Compose ats-authproxy-prefix. Imagem ats-10.2.0-lab:local. Testemunha ATS-AUTHPROXY-PREFIX-WITNESS. Última linha:
SUCCESS ats-authproxy-prefix pin=10.2.0 control-none=REALUSER-ONLY control-single=REALUSER-ONLY control-403=yes dup-last-wins=yes ATS-AUTHPROXY-PREFIX-WITNESS
Remova todos os campos do cliente cujo nome comece com --forward-header-prefix antes da sobreposição. HttpRemoveMimeHeader já percorre TSMimeHdrFieldFind até que nenhum permaneça (utils.cc:104-114). Use-o na requisição do cliente para o prefixo configurado e, em seguida, defina. Faça com que HttpSetMimeHeader destrua os extras de TSMimeHdrFieldNextDup da mesma forma que origin_server_auth set_header e access_control setHeader já fazem.
Até então, não aponte a ACL de origem para os cabeçalhos de prefixo do authproxy, a menos que a origem aplique a regra do primeiro-que-chega, ou rejeite nomes de prefixo duplicados na origem.
b1df7334b39a878971c376da849e8da4984918b6)plugins/authproxy/authproxy.cc StateAuthorizedplugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeaderorigin_server_auth.cc set_header percorre NextDup