계: Code Quality
코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.
Code Correctness: readObject() Invokes Overridable Function
Abstract
이 클래스 내의
readObject()
메서드는 재정의할 수 있는 함수를 호출합니다.Explanation
deserialization 중에
예제 1: 다음
readObject()
는 생성자로 사용되므로 이 함수가 종료될 때까지는 개체 초기화가 완료되지 않습니다. 따라서 Serializable
클래스의 readObject()
함수가 오버라이드 가능 함수를 호출하면 개체가 완전히 초기화되기 전에 오버라이드 메서드가 개체 상태에 접근할 수 있습니다.예제 1: 다음
readObject()
함수는 오버라이드할 수 있는 메서드를 호출합니다.
...
private void readObject(final ObjectInputStream ois) throws IOException, ClassNotFoundException {
checkStream(ois);
ois.defaultReadObject();
}
public void checkStream(ObjectInputStream stream){
...
}
checkStream()
함수와 이 함수를 포함하는 클래스는 final
및 public이 아니므로 함수를 오버라이드할 수 있습니다. 이로 인해 공격자는 checkStream()
함수를 오버라이드하여 역직렬화 중에 개체에 접근할 수 있습니다.References
desc.structural.java.code_correctness_readobject_invokes_overridable_function