SQL 인젝션
GitLab v19.5요약
SQL 및 NoSQL 인젝션 취약점을 검사합니다. 소프트웨어가 업스트림 컴포넌트에서 외부 영향을 받는 입력을 사용하여 SQL 명령의 전부 또는 일부를 구성하면서도, 다운스트림 컴포넌트로 전송될 때 의도한 SQL 명령을 변경할 수 있는 특수 문자를 무력화하지 않거나 잘못 무력화하는 경우에 발생합니다.
설명#
SQL 및 NoSQL 인젝션 취약점을 검사합니다. SQL 인젝션 공격은 클라이언트가 애플리케이션으로 보내는 입력 데이터를 통해 SQL 쿼리를 삽입하거나 "주입"하는 방식으로 이루어집니다. SQL 인젝션 공격이 성공하면 데이터베이스에서 민감한 데이터를 읽거나, 데이터베이스 데이터를 수정(Insert/Update/Delete)하거나, 데이터베이스에 대한 관리 작업(예: DBMS 종료)을 실행하거나, DBMS 파일 시스템에 있는 특정 파일의 내용을 복구할 수 있고, 경우에 따라서는 운영 체제에 명령을 내릴 수도 있습니다. SQL 인젝션 공격은 인젝션 공격의 한 유형으로, 미리 정의된 SQL 명령의 실행에 영향을 주기 위해 데이터 플레인 입력에 SQL 명령을 주입합니다. 이 검사는 요청의 파라미터(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 변경하여 SQL 또는 NoSQL 쿼리에 구문 오류를 일으키려 시도합니다. 그런 다음 로그와 응답을 분석하여 오류가 발생했는지 탐지합니다. 오류가 탐지되면 취약점이 존재할 가능성이 높습니다.
해결 방법#
소프트웨어가 업스트림 컴포넌트에서 외부 영향을 받는 입력을 사용하여 SQL 명령의 전부 또는 일부를 구성하면서도, 다운스트림 컴포넌트로 전송될 때 의도한 SQL 명령을 변경할 수 있는 특수 문자를 무력화하지 않거나 잘못 무력화하는 경우에 발생합니다.
사용자가 제어할 수 있는 입력에서 SQL 구문을 충분히 제거하거나 이스케이프하지 않으면, 생성된 SQL 쿼리에서 해당 입력이 일반 사용자 데이터가 아니라 SQL로 해석될 수 있습니다. 이를 이용해 보안 검사를 우회하도록 쿼리 로직을 바꾸거나, 백엔드 데이터베이스를 변경하는 구문을 추가로 삽입할 수 있으며, 여기에는 시스템 명령 실행이 포함될 수도 있습니다.
SQL 인젝션은 데이터베이스 기반 웹사이트에서 흔히 발생하는 문제가 되었습니다. 이 결함은 쉽게 탐지되고 쉽게 악용되므로, 사용자 기반이 아주 적은 사이트나 소프트웨어 패키지라도 이런 종류의 공격 시도를 받을 가능성이 높습니다. 이 결함은 SQL 이 제어 플레인과 데이터 플레인을 실질적으로 구분하지 않는다는 사실에 기인합니다.