
Injection
외부에서 입력된 데이터를 적절히 검증하지 않고 사용하는 경우 발생하는 취약점
사용자가 제공한 데이터가 애플리케이션에 의해 직접적으로 쿼리나 명령으로 해석될 때 발생하며, 악의적인 데이터가 삽입되어 데이터베이스나 시스템에 영향을 줄 수 있다.
언제 발생?
주요 Injection 유형
예방 방법
공격 시나리오
#1 SQL Injection: 애플리케이션이 신뢰할 수 없는 데이터를 사용하여 아래와 같은 취약한 SQL 쿼리를 생성한다.
String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
#2 애플리케이션이 프레임워크를 맹신하여 여전히 취약한 쿼리를 생성할 수 있다(예: Hibernate Query Language(HQL)).
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");
두 경우에서 공격자는 브라우저에서 'id' 파라미터 값을 다음과 같이 수정해 요청을 보낼 수 있다.
http://example.com/app/accountView?id=' UNION SELECT SLEEP(10);--
이 쿼리는 모든 accounts 테이블의 모든 레코드를 반환하도록 변형되며, 더 위험한 공격으로 데이터 수정 또는 삭제할 수 있으며, 저장된 프로시저를 실행할 수도 있다.