지난 몇 년 동안 여러 가지 심각도가 높은 취약점이 다양한 방식으로 시스템에 영향을 미친 것으로 알려지면서 Linux 사용자들은 최근 쉽지 않은 시간을 보냈습니다. 이제 보안 연구원들이 풀어야 할 또 다른 취약점 클러스터가 있는데, 모두 강력한 원격 코드 실행(RCE)을 위한 잠재적인 경로를 가진 GNU/Linux 시스템을 대상으로 하는 CUPS(Common UNIX Printing System) 기능과 관련된 것입니다. 2024년 9월 27일, evilsocket.net의 Simone Margaritelli는 CUPS의 여러 악용 가능한 취약점에 대한 중요한 정보를 발표했으며 , 이후 4개에 CVE가 할당되었습니다. 이 숫자는 더 늘어날 수 있지만 이 글을 쓰는 시점에서 보안 커뮤니티는 이러한 발견의 실제 심각성에 대해 논의하고 있습니다. CVE 중 하나인 CVE-2024-47177은 현재 MITRE의 심각도 등급이 9.1이지만, 이 명령 인젝션 결함을 성공적으로 조작하려면 CUPS 서비스가 활성화된 서버에 의존해야 하며, 추가로 UDP 포트 631 또는 DNS-SD에 대한 액세스가 필요합니다. 그러나 RedHat은 CUPS를 다른 포트로 리매핑하는 것이 가능하다고 언급합니다.
마가리텔리가 이 사건을 종합적으로 분석한 결과, 커뮤니티의 의견 차이에도 불구하고 무시해서는 안 되는 교묘하고 복잡한 공격의 사슬이 드러났습니다. 이 사건은 위협 행위자가 충분히 결심하고 잘못된 코딩 패턴으로 인해 작은 기회의 창이 열려 있다면 겉보기에 무해해 보이는 종속성이 심각하게 악용될 수 있다는 교훈을 제공합니다.
CUPS 시나리오는 많은 개발자와 앱 보안 전문가가 이전에 경험했던 것과는 조금 다르므로, 이를 살펴보면서 자신의 실력을 테스트해 보시기 바랍니다.
취약점입니다: CUPS를 통한 원격 코드 실행(RCE) Evilsocket 블로그는 이러한 익스플로잇에 대한 타의 추종을 불허하는 철저한 배경 지식을 제공하며, 앞으로도 계속 면밀히 살펴볼 리소스입니다. 또한 마가리텔리는 기사에서 익명의 소식통을 인용하고 있는데, 그는 Linux의 일반적인 보안 견고성에 대해 낙관적이지 않은 것으로 보입니다:
"일반적인 보안 관점에서 볼 때, 현재와 같은 Linux 시스템 전체는 악용되기를 기다리는 끝없는 보안 허점 덩어리일 뿐입니다 ."이는 오픈 소스 환경에 여전히 만연한 내재된 보안 위험을 냉정하게 상기시켜 주며, 전 세계 개발 커뮤니티에서 보안 인식 제고와 안전한 코딩 기술이 절실히 필요하다는 사실을 일깨워 줍니다. CVE를 살펴보겠습니다:
취약점 체인은 광범위하게 퍼져 있으며 현재 다음 패키지의 모든 현재 및 이전 버전에 영향을 미칩니다:
distrotech/컵-필터 오픈프린팅/컵 필터 컵 브라우징 libcupsfilters libppd CUPS는 20년 넘게 UNIX 및 Linux 운영 체제의 레거시 구성 요소로 사용되어 왔습니다. 인쇄 서비스 종속 기능으로 인해 네트워크 요청을 열심히 수행하기 때문에 RCE급 취약점의 주요 표적이 되고 있습니다. 그러나 이 경우에는 공격이 결합되어 성공적인 결과를 제공하는 방식에 약간의 독창성이 있습니다. 즉, 인증되지 않은 탐지되지 않은 공격자가 인터넷 인쇄 프로토콜(IPP) URL을 악성 URL로 대체하고, 새로 추가된 프린터의 기능을 설명하는 데 사용되는 파일인 'PPD(포스트스크립트 프린터 설명) 파일'에 명령 인젝션을 유발할 수 있는 지시어를 수정하는 것이 핵심입니다. 이로 인해 인쇄 작업이 활성화되면 명령 실행 공격이 발생하며, CUPS 구성 요소 내의 입력 유효성 검사 부족에 의존합니다. 또한 이 특정 취약점을 수정하는 것은 양날의 검과 같다고 Evilsocket은 지적합니다 . CUPS에는 고위험, 익스플로잇이 가능한 구성 요소로 알려진 실행 파일인 푸마틱-리프 필터가 포함되어 있습니다. 이 구성 요소와 관련된 CVE는 2011년으로 거슬러 올라가며, foomatic-rip이 OS 명령을 실행하는 데 활용될 수 있다는 사실이 확인되었지만, 이를 수정하면 안정성 문제가 발생하고 많은 구형 프린터에 대한 지원이 끊어집니다. 이는 극복해야 할 복잡한 문제입니다.
위협 행위자가 공격을 개시합니다.CVE-2024-47176 : cups-browsed <= 2.0.1 is vulnerable because it binds to UDP port 631 using INADDR_ANY, which means it trusts any packet received from any source. This allows an unauthenticated remote attacker to send a malicious UDP packet with a manipulated IPP URL (pointing to the attacker-controlled IPP server), triggering the vulnerability. The victim’s machine now thinks it’s connecting to a new printer and sends a request asking for printer attributes. 피해자 시스템에서 프린터 속성을 처리합니다.CVE-2024-47076 : libcupsfilters <= 2.1b1 has a vulnerability in cfGetPrinterAttributes5, which does not properly validate or sanitize the IPP attributes returned from an IPP server. When cups-browsed processes the packet, it can be tricked into reading malicious attributes sent by the attacker. 피해자 시스템이 공격자-제어자 IPP 서버에 연결됩니다.CVE-2024-47175 : libppd <= 2.1b1 in the ppdCreatePPDFromIPP2 function does not properly validate or sanitize IPP attributes when saving them to a temporary PPD (PostScript Printer Description) file. This allows the attacker to inject arbitrary data into a PPD file, including the FoomaticRIPCommandLine directive, which the printing system can later execute. Victim system initiates print job and attacker’s code is executed CVE-2024-47177 : cups-filters <= 2.0.1 is vulnerable because the foomatic-rip filter executes arbitrary commands through the FoomaticRIPCommandLine directive, allowing the attacker to run commands as the cups-browsed process. The attacker waits for the victim’s machine to initiate a print job. The moment this happens, the attacker’s malicious code will be executed (Remote Code Execution). RCE 리스크를 어떻게 완화할 수 있나요? 비즈니스 운영의 일부로 CUPS를 사용하는 회사의 경우, Evilsocket과 RedHat에서 권장하는 해결 방법을 따라야 합니다. 여기에는 긴급 수준의 우선 순위로 보안 패치를 적용하는 것이 포함되지만 이에 국한되지 않습니다. 명령어 인젝션에 대한 일반적인 내용은 종합 가이드를 참조하세요.
더 많은 무료 코딩 가이드라인에 관심이 있다면 보안 코딩 모범 사례를 파악하는 데 도움이 되는 Secure Code Coach를 확인하세요.