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.ognl

    • com.opensymphony.xwork2.util

    • com.opensymphony.xwork2.util.reflection

    • org.apache.struts2.util.StrutsUtil

  • ${}과 같은 EL Expression을 가능한 사용하지 않도록 합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 사용자의 입력값을 OgnlUtil.getValue()를 사용하여 직접 실행함으로써 공격자가 원격 코드 실행을 유발할 수 있습니다.

  • 안전한 코드: 입력값을 검증하여 허용된 문자열만 처리하도록 제한하며, OGNL 표현식이 직접 실행되지 않도록 합니다.

참조

Last updated