
SQLite 3.53.4 - 높은 - 로컬 - 권한 잔여 - INSERT SELECT 전송 시 소스 READ 건너뜀
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-xfer-auth
분류: 권한 잔존 도달 범위: 로컬
SQLite 3.53.4 (b09c88c, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc)는 여전히 INSERT INTO dest SELECT * FROM src에 대해 xferOptimization 빠른 경로를 사용합니다. sqlite3AuthCheck는 dest에 대한 SQLITE_INSERT만 검사합니다. 복사 과정은 src에 대해 sqlite3Select나 컬럼별 sqlite3AuthRead를 호출하지 않습니다. SELECT * FROM src는 거부됩니다. INSERT SELECT는 증인(witness)을 복사합니다. authorizer 로그는 INSERT:dest입니다.
Authorizer는 임베더가 설치하지 않는 한 비활성화됩니다. RCE는 아닙니다. DRH는 Fossil d1cdb817을 3.53 버그 수정이 아닌 3.54 기능으로 취급했습니다. 3.54.0은 아직 초안입니다.
| ID | 아직 CVE 없음 |
| 분류 | 권한 잔존 (READ 거부된 테이블 복사) |
| 도달 범위 | 로컬 (임베더 sqlite3_set_authorizer) |
| CWE | CWE-863 |
| CVSS | 높음: 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| 제품 | SQLite (Hwaci) |
| 영향받는 버전 | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) |
| 인증 | src에 대한 READ/SELECT를 거부하고 dest에 대한 INSERT를 허용하는 설치된 authorizer에 대한 로컬 SQL |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18850 전용 |
dest가 스키마 호환되고 INSERT가 허용될 때 INSERT INTO dest SELECT * FROM src를 준비합니다. 원시 B-tree 레코드가 READ 거부된 소스 테이블을 떠나 dest에 도착합니다. 순수한 SELECT * FROM src는 SQLITE_AUTH입니다. xfer 경로는 SELECT를 컴파일하지 않으므로 소스 SQLITE_SELECT, 테이블 수준 SQLITE_READ, 컬럼별 sqlite3AuthRead가 전혀 발생하지 않습니다.
신뢰할 수 없는 SQL / 컬럼 ACL 게이트로 sqlite3_set_authorizer를 설치한 임베더가 필요합니다. 기본 라이브러리에서는 해당 콜백이 NULL입니다. RCE는 아닙니다.
이 GA의 다른 잔존 항목들과 동일한 3.53.4 Crit/High 탐색입니다. Authorizer는 sqlite3_set_authorizer에 문서화되어 있습니다. INSERT 인증은 dest 테이블에만 적용됩니다(insert.c:969). xfer는 sqlite3Select() 이전에 수행됩니다(insert.c:1020-1038). xferOptimization은 레코드를 복사합니다. 이 핀에서 insert.c를 grep한 결과: sqlite3AuthCheck 하나, sqlite3AuthRead 없음. SQLITE_OMIT_XFER_OPT는 기본 빌드 플래그가 아닙니다.
포럼 2026-05-21T03:31:22Z. 트렁크 d1cdb817cafd03a4는 3.54 전용입니다. DRH: 새 기능이며, branch-3.53에 반영되지 않습니다.
cd lab
./run.sh
amalgamation 3.53.4와 lab/xfer_auth.c를 빌드합니다. Compose sqlite-xfer-auth. 127.0.0.1:18850에 바인드합니다. Oracle은 인프로세스 authorizer의 JSON입니다: SELECT * FROM src 거부됨; INSERT INTO dest SELECT * FROM src 정상; dest에 SQLITE-XFER-AUTH-WITNESS 존재; insert 액션은 INSERT:dest만 해당.
SUCCESS sqlite-xfer-auth how=xfer-opt-skip-src-read select-src=denied insert-select=ok dest-has-witness=yes SQLITE-XFER-AUTH-WITNESS
3.54 d1cdb817이 하는 방식으로 소스를 인가하십시오: authorizer가 등록되어 있으면 xferOptimization은 src에 대해 SELECT/READ를 sqlite3AuthCheck해야 합니다(또는 빠른 경로를 거부하고 sqlite3Select로 폴스루해야 합니다). 그때까지는 테이블에 대한 READ를 거부하는 임베더는 호환되는 모든 dest에 대한 INSERT도 거부하거나 -DSQLITE_OMIT_XFER_OPT로 컴파일해야 합니다.
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c sqlite3AuthCheck INSERT dest, xferOptimization before sqlite3Select