🇰🇷 한글 설명
ONNX(Open Neural Network Exchange) 1.22.0 이전 버전에서 RNNShapeInference_opset1_to_6() 함수가 RNN, LSTM, GRU 노드의 첫 번째 입력 텐서 랭크를 검증하지 않아 발생하는 문제입니다. 악의적으로 조작된 모델을 onnx.shape_inference.infer_shapes()로 처리하면 범위를 벗어난 메모리를 읽어 애플리케이션이 비정상 종료될 수 있습니다. 해당 문제는 1.22.0 버전에서 수정되었습니다.
💡 쉬운 설명
ONNX는 머신러닝 모델을 주고받는 표준 형식입니다. 신뢰할 수 없는 모델 파일을 열면 프로그램이 멈추거나 충돌할 수 있습니다.
🇺🇸 원문 (English)
Open Neural Network Exchange (ONNX) is an open standard for machine learning interoperability. Prior to 1.22.0, RNNShapeInference_opset1_to_6() processes malformed RNN and LSTM nodes from opsets 1 through 6 and GRU nodes from opsets 3 through 6 without verifying that the first input has rank three. The function accesses dim(0) and dim(1) on an undersized protobuf shape, which can read outside the intended repeated field and terminate an application when onnx.shape_inference.infer_shapes() processes an untrusted model that can pass onnx.checker.check_model(). This issue is fixed in version 1.22.0.
📍 영향받는 시스템
ONNX 1.22.0 미만 버전을 사용하는 Python 기반 머신러닝 환경 및 모델 처리 애플리케이션
⚔️ 공격 벡터
공격자가 RNN/LSTM/GRU 노드의 형상 정보를 비정상적으로 구성한 악성 ONNX 모델을 피해자가 shape inference로 처리하도록 유도
🛡️ 대응 방법
ONNX 패키지를 1.22.0 이상으로 업그레이드 (pip install --upgrade onnx>=1.22.0)
🔧 검증 코드
출력된 Version 값이 1.22.0 미만이면 취약하므로 업그레이드가 필요하고, 1.22.0 이상이면 수정된 버전입니다.
pip show onnx 2>/dev/null | grep -i version