OGNL 삽입 (OGNL Injection)
Expression Injection (OGNL Injection)
설명
OGNL(Object Graph Navigation Language)은 Java 객체 및 속성에 접근할 수 있는 표현 언어로, Struts2에서 주로 사용됩니다. 사용자 입력이 적절히 검증되지 않고 OGNL 표현식으로 평가되면 원격 코드 실행(RCE, Remote Code Execution)과 같은 심각한 보안 취약점이 발생할 수 있습니다.
잠재적 영향
원격 코드 실행(RCE): 공격자가 악의적인 OGNL 표현식을 실행하여 서버에서 임의의 코드를 실행할 수 있습니다.
인증 우회: 인증 및 권한 검사를 우회하여 관리자 권한을 탈취할 수 있습니다.
데이터 조작: OGNL 표현식을 통해 중요한 애플리케이션 데이터를 수정하거나 삭제할 수 있습니다.
해결 방법
OGNL 표현식에 사용자 입력을 직접 포함하지 않기
사용자 입력값이 OGNL 표현식으로 직접 평가되지 않도록 사용자 값을 아래와 같은 함수에 전달하여 실행하지 않도록 합니다.
com.opensymphony.xwork2.ognlcom.opensymphony.xwork2.utilcom.opensymphony.xwork2.util.reflectionorg.apache.struts2.util.StrutsUtil
${}과 같은 EL Expression을 가능한 사용하지 않도록 합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: 사용자의 입력값을
OgnlUtil.getValue()를 사용하여 직접 실행함으로써 공격자가 원격 코드 실행을 유발할 수 있습니다.안전한 코드: 입력값을 검증하여 허용된 문자열만 처리하도록 제한하며, OGNL 표현식이 직접 실행되지 않도록 합니다.
참조
Last updated