
OpenPLC-v3에는 명령줄에서 전달된 파일 경로 매개변수에 대한 유효성 검사를 수행하지 않아 발생하는 경로 주입 취약점이 있습니다. 공격자는 악의적인 경로를 구성하여 읽을 수 있는 모든 파일을 읽을 수 있으며, 이는 정보 유출 위험을 초래합니다.
OpenPLC-v3에는 명령줄에서 전달된 파일 경로 매개변수에 대한 유효성 검사를 수행하지 않아 발생하는 경로 주입 취약점이 있습니다. 공격자는 악성 경로를 구성하여 읽을 수 있는 모든 파일을 읽을 수 있으며, 정보 유출 위험이 있습니다.
잘못된 입력 검증 (경로 주입)
정보 공개 (임의 파일 읽기)
glue_generator.cpp에서 컴파일된 바이너리 프로그램에는 사용자가 제공한 파일 경로에 대한 검증 부족으로 인한 임의 파일 읽기 취약점이 있습니다.
공격자는 프로그램을 실행할 때 입력 인수로 임의의 파일(예: /etc/passwd)을 지정할 수 있습니다. 애플리케이션은 이후 파일을 줄 단위로 읽고 내용을 파싱한 다음, 다음 항목에 대한 검증을 수행하지 않고 파싱된 데이터를 cout을 사용하여 콘솔에 직접 출력합니다.
그 결과, 공격자는 실행 중인 프로세스의 권한 컨텍스트에서 접근할 수 있는 모든 파일을 읽을 수 있어 민감한 정보가 유출될 수 있습니다.
1.공격자는 취약한 바이너리를 실행할 수 있습니다.
2.실행 중인 사용자 계정은 대상 파일에 대한 읽기 권한이 있습니다.
성공적인 악용은 다음을 포함하되 이에 국한되지 않는 민감한 시스템 정보를 노출할 수 있습니다:
이 정보는 추가 권한 상승 또는 수평 이동을 용이하게 할 수 있습니다.
glue_generator.cpp에서 프로그램은 두 개의 문자열 배열, varName 및 varType를 사용하여 파싱된 파일 내용을 처리하고 명령줄에 출력합니다.
파싱하는 동안 프로그램은 특정 줄 형식을 기대합니다:
(<varType>,<varName>,
구체적으로:
(와 첫 번째 , 사이의 내용은 varType에 할당되고;
첫 번째와 두 번째 , 사이의 내용은 varName에 할당됩니다.
소스 파일 경로 또는 파싱된 데이터의 적법성에 대한 검증은 수행되지 않습니다.
단계 1: 테스트 파일 만들기
다음 내용으로 test.txt라는 파일을 만듭니다:
(aaaaaaaa,123,
단계 2: 취약한 프로그램 실행
다음 명령을 실행합니다:
./glue_generator ./test.txt whatever.cpp
프로그램은 내용을 파싱하고 추출된 값을 콘솔에 출력합니다.
단계 3: 임의 파일 읽기
공격자가 민감한 파일(예: /etc/passwd)을 수정하거나 제어하여 필요한 형식과 일치하는 데이터를 포함시킬 수 있다면:
(aaaaaaaa,123,
취약한 프로그램은 해당 파일에서 일치하는 내용을 파싱하여 출력합니다.
민감한 파일의 경우 다음 패턴과 일치하는 모든 줄이 공개될 수 있습니다:
(<content1>,<content2>,
유출되는 정보의 양은 다음에 따라 달라집니다:
취약점은 다음으로 인해 발생합니다:
1.사용자 제어 파일 경로에 대한 검증 부족.
2.임의 파일에 적용되는 안전하지 않은 파싱 논리.
3.권한 검사 없이 파싱된 콘텐츠의 직접적인 콘솔 출력.
4.접근 가능한 파일 위치에 대한 제한 부재.
취약점을 완화하려면: