
pfSense Plus MIM API toolkit b4acd7ca - Alta - Remoto - Privilégio remanescente - GET export-key chaves privadas
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-api-export-key-get
Classe: Privilégio residual Alcance: Remoto
pfSense Plus MIM API (Netgate) pin b4acd7ca - OpenAPI público + cliente Python gerado para o controlador Nexus Multi-instance Management.
GET /system/certauth/{refid}/export-key está documentado como "Download the CA certificate signing key". GET /system/certificates/{refid}/export-key é "Download the certificate's private key". GET /system/certificates/{refid}/export-p12 é um arquivo PKCS12 unificado sem proteção por senha. A documentação mapeia GET sob /system para mim_system_read / mim_read_system. mim_view está documentado como sem informações confidenciais. A especificação não tem securitySchemes e nenhuma segurança por operação. O _get_kwargs gerado é o método mais uma URL entre aspas. A autorização nunca é adicionada ali.
Isto não é php, não é shell, e não é firmware POST. Um JWT roubado do G9 sample TLS skip ou um G6 fleet token é suficiente para chamar estes GETs. Se um MIM JWT com forma de leitura é suficiente no Plus é o residual. Eu não executei o Plus. O RBAC do Plus não foi executado.
| ID | sem CVE ainda |
| Classe | Privilégio residual |
| Alcance | Remoto (HTTP autenticado para o controlador Nexus; o laboratório é o contrato público do cliente) |
| CWE | CWE-200, CWE-862 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N se um MIM JWT com forma de leitura puder chamar estes GETs |
| Produto | Netgate/pfsense-api (controlador pfSense Plus Nexus MIM OpenAPI + cliente gerado) |
| Afetado | pin b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). OpenAPI 3.0.3 título pfSense API versão 1.0. Plus 25.11+. Não é o pacote CE REST. |
| Autenticação | Nexus JWT documentado (POST /login, Bearer). O laboratório é o OpenAPI público mais o contrato _get_kwargs gerado. O RBAC do Plus não foi executado. |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | 127.0.0.1:19141 apenas. Sem imagem Plus. |
Eu fixei github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f. Não o master após esse dia. Não o pacote CE de terceiros jaredhendrickson/pfsense-api.
Hub da série: pfsense-api-nexus-mim. Este pacote é a Parte 4.
A documentação mapeia GET sob /system para mim_system_read / mim_read_system. mim_view está documentado como sem informações confidenciais. O residual é a exportação de chave privada via GET, com PKCS12 documentado como desprotegido, e _get_kwargs gerado que nunca adiciona Authorization.
| Método | Caminho | Privilégio |
|---|---|---|
GET DownloadCAKey | /system/certauth/{refid}/export-key | Recon (comprovado em laboratório em mock): corpo application/octet-stream contendo o PEM testemunha. Inferido no Plus: chave de assinatura do certificado CA se o RBAC permitir o GET. |
GET GetCertKey | /system/certificates/{refid}/export-key | Recon (comprovado em laboratório em mock): PEM testemunha. Inferido no Plus: chave privada da folha. |
GET GetCertP12 | /system/certificates/{refid}/export-p12 | Recon (comprovado em laboratório em mock): mesmo corpo testemunha. Inferido no Plus: certificado mais chave como PKCS12 sem proteção por senha (resumo OpenAPI). |
_get_kwargs gerado | todas as três operações | Recon (comprovado em laboratório): os kwargs são apenas method mais url entre aspas. Sem headers, sem Authorization, sem Bearer. |
Client (sem token) | todas as três operações | Recon (comprovado em laboratório): três acertos no mock com has_authorization=false e corpo testemunha (client-no-auth=yes, witness-body=yes). |
AuthenticatedClient | todas as três operações | Recon (comprovado em laboratório): três acertos no mock com Authorization: Bearer mock-token (authed-bearer=3). Bearer é uma propriedade do wrapper, não _get_kwargs. |
| JWT roubado do MITM G9, ou token de frota G6 | os mesmos três GETs, mais /api/device/pfsense/{device_id}/api se o resquício da frota o mantiver | Recon (inferido, encadeado): extrair chaves CA / folha para o controlador e cada instância inscrita que o token conseguir nomear. |
| Usar chaves CA / folha roubadas | TLS, VPN, IPsec, certificados WebGUI | Integridade (inferido, não testado em laboratório): emitir certificados descendentes como a CA; personificar o nome TLS do Nexus; descriptografar túneis que usam esses certificados. Não é root Unix por si só. |
| GETs relacionados de lista/detalhe | /system/certauth?withprivkey=true, campos prv / private_key do certificado | Recon (especificação, não este laboratório): despejo em massa dos mesmos segredos. Não exercitado aqui. |
Disponibilidade: nenhuma necessária.
Comprovado em laboratório vs inferido: os três caminhos GET do OpenAPI, a frase "sem proteção por senha" do PKCS12, _get_kwargs sem Authorization, três acertos sem autenticação do Client com PEM testemunha, três acertos Bearer do AuthenticatedClient, e o clone fixado de pfapi_openapi.yml são comprovados em laboratório. Os 200s de mim_system_read / mim_view no Plus, a emissão de certificados descendentes e a extração de chaves em toda a frota são inferidos. Além disso, o RBAC não foi executado.
Requer (inferido, Plus não executado): login no Nexus mais um grupo autorizado a GET sob /system/certauth e /system/certificates. Não admins / mim_superuser se o resquício for real. Não Diagnostics: Command. Caminho de rede até o controlador :8443 (ou o proxy do dispositivo) com um JWT.