Um usuário de nível de construtor pode fazer pedidos HTTP do lado do servidor do Budibase para loopback ou alvos de rede privada usando DNS rebinding contra dois caminhos de busca de saída que ainda não estão ligados à resposta DNS validada. O primeiro caminho é a importação da consulta OpenAPI. Ele valida o nome do host fornecido com a lista negra e então executa uma busca em bruto separada. Um nome de máquina que se resolve para um endereço público durante a validação e para ` 127.0.0.1 ` durante o pedido é aceito.

O segundo caminho é a execução de datasource/query REST. Chama o ajudante fixo `fetchWithBlacklist()`, mas fornece um `fetchFn` personalizado undici que instala um `dispatcher`. O ajudante passa por um nó pinned `agente', mas undici usa o despachador e resolve o nome de máquina original novamente no momento da conexão. Isto derrota o pinning DNS adicionado para o aviso de busca de saída anterior. O impacto é autenticado SSRF a partir do processo do servidor Budibase. Um atacante com os privilégios relevantes do construtor/ consulta pode alcançar loopback ou serviços HTTP privados que devem ser bloqueados pelas proteçãos de busca de saída do Budibase, sujeitas ao gerenciamento de resposta normal de cada recurso.

1. Configurar um nome de máquina controlado pelo atacante para que a procura de validação retorne um endereço IP público e a procura posterior retorne um endereço interno como ` 127.0.0.1 `. 2. Inicie um serviço HTTP loopback no host do Budibase. 3. Para a importação de consulta OpenAPI, envie uma URL de importação como ` /openapi.json` através dos endpoints de importação de consulta do construtor. Em um arnês que corresponde ao código de importação atual, a validação resolveu ` rebind.test` para ` 8.8.8.8 `, a captação em bruto então resolveu ` rebind.test` para ` 127.0.0.1 `, e o loopback canary retornou `loopback- canary-hit:/openapi.json`. 4. Para a execução de datasource/query REST, configure um URL de datasource/query REST usando o mesmo nome de host rebinding. Em um arnês correspondente ao caminho de busca personalizado do ajudante atual mais REST undici, um URL de loopback direto foi bloqueado e um controle do agente de Node- agente pinneado não acertou o loopback, mas o caminho REST undici re- re- resolveu o nome do host para ` 127.0.0.1 ` e retornou `REST-UNDICI- REBIND-CANARY ' do serviço de loopback. Prova de importação do OpenAPI observada. ```json { "resultado": "permitido", "corpo": "loopback-canary-hit:/openapi.json", "lookups": [ {"phase": "guard", "hostname": "rebind.test", "address": " 8.8.8.8 "}, {"phase": "Fetch", "Hostname": "rebind.test", "Endereço": " 127.0.0.1 "} ] } ```.

Prova REST undici observada. ```json { "Control Direto": { "Resultado": "bloqueado", "HitsAfter": 0 }, "pinnedNodeFetchControl": {"resultado": "no_loopback_hit", "hitsApós": 0 }, "undiciBipass": { "recebido": "permitido", "estatuto": 200, "corpo": "REST-UNDICI-REBIND-CANÁRIO", "hitsAfter": 1 }, "LookupTrace": [ {"phase": "guard", "hostname": "rebind.test", "address": " 8.8.8.8 "}, {"phase": "Fetch", "Hostname": "rebind.test", "Endereço": " 127.0.0.1 "} ] } ``` ## Causa raíz e detalhes técnicos. O ajudante central agora resolve e valida o nome do host- alvo, depois passa um nó pinned `http.Agent` ou `https.Agent` ao pedido. Isso protege os chamadores cujo cliente HTTP honra a opção "agente" do nó.

A importação de consulta OpenAPI não usa esse ajudante. Em `pacotes/server/src/api/controllers/query/import/index.ts`, `assertUrlIsSafe()` chama `blacklist. isBlacklist(parsed.hostname)`, mas `fetchFromUrl()` em seguida chama `fetch(currentUrl, { redirecione: "manual" })`. Isso cria um espaço de validação- em seguida- fetch onde o DNS pode mudar entre a busca da lista negra e a conexão real. A execução REST datasource/query usa o ajudante, mas altera a semântica de transporte. Em `pacotes/server/src/integrations/rest.ts`, `setDispatcher()` cria um expedidor undici com `getDispatcher({ rejectUnauthorized, url: requestUrl }', então a função de busca personalizada chama `fetch(requestUrl, setDispatcher(requestInput, requestUrl)'. Em `pacotes/backend-core/src/utils/outboundFetch.ts`, `fetchWithBlacklist()` passa o Nó pinned `agente' para `fetchFn', mas o 'spetch' fornecido usa o `spedcher'. A conexão real executa uma resolução de segundo nome de máquina e pode ser rebote para um endereço bloqueado.

O código atual afetado está presente na última `master` e na última etiqueta de lançamento ` 3.39.14 `. Através do ajudante de busca de saída, atraia a opção de procura OpenAPI através da opção de busca, em vez de validar e buscar em bruto separadamente.

Faça com que o `fetchWithBlacklist()` pin a conexão real para cada transporte suportado. Para os chamadores undici, forneça um expedidor cujo comportamento de busca ou conexão seja afiado ao IP validado, ou rejeite funções de busca personalizadas que não obriguem explicitamente o endereço afiado. Adicione cobertura de regressão para bloqueio direto de loopback, DNS revincular através da importação OpenAPI, DNS revincular através do despachador REST undici, redirecionamento-para-loopback, IPv 4 - IPv mapeado 6, e respostas DNS mistas público/privada. Registro de aconselhamento: GHSA-xg 5 g- 26 x 8 - cvf 4. Não há nenhum identificador adicional listado.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 24 T 21: 17: 25.000 Z e lista a sua última modificação como 2026 - 07 - 24 T 21: 17: 25.000 Z. Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N.

Informações sobre software e versão afetadas: pacote npm @budibase/ server — ECOSISTEM: introduzido 0, última afetada 3.38.1.

Classificação e evidência: identificadores de fraqueza CWE- 918. O registro contém 7 suporte de referências nestes tipos: WEB, PACKAGE.