20년 된 Curl의 버그가 탄력적으로 수정되었습니다 - 또 다른 수정으로 돌아왔습니다 - CVE-2021-22925
몇 주 전에 CVE-2021-22898이 발표되었습니다. 이 취약점은 2001년 3월 22일에 배포된 버전 7.7의 curl/libcurl에 영향을 줍니다. 이 취약점은 거의 사용되지 않는 옵션인 curlopt_telnet옵션이 구문 분석되는 방식에 결함이 있어 데이터가 유출될 수 있다는 내용이었죠. 당시 수정 사항이 생성되어 curl/libcurl 코드베이스에 제출되었고 문제가 해결되었습니다. 즉, 7월 21일에 CVE-2021-22925가 나타나기 전까지는요. 이전 취약점에 대한 초기 수정이 문제를 올바르게 해결하지 못했기 때문에 새로운 수정이 생성된 것으로 보입니다.
이 문제는 curl 7.7부터 7.77.0까지, 즉 curl 7.78.0(또는 그 이상)을 제공하는 최신 배포 버전을 제외하고 지난 20년간 대부분의 Linux 배포판에 기본적으로 포함된 거의 모든 curl 버전에 영향을 미칩니다.
TuxCare의 Lifecycle 연장 지원 팀은 영향을 받는 모든 배포판, 즉 CloudLinux 6, CentOS 6, OracleLinux 6 및 Ubuntu 16.04에 대한 새 패치를 준비하여 제공하기 시작했습니다.
이전 취약점에 대한 패치는 CURLOPT_TELNETOPTIONS가 악용되어 의도하지 않은 데이터를 서버 외부로 전달하도록 만들 수 있는 상황을 해결했습니다. 그러나 이러한 상황이 발생할 수 있는 두 번째 상황을 놓쳤기 때문에 불완전했습니다.
새로운 수정 사항은 연결의 다른 쪽 끝으로 데이터를 보내기 전에 호출하는 애플리케이션에서 제공한 문자열을 처리할 때 sscanf()를 올바르게 호출하여 두 가지 상황을 모두 해결합니다.
현재로서는 이 결함에 대한 익스플로잇이 없는 것으로 알려져 있으며, 이 옵션은 거의 사용되지 않습니다. 그러나 다른 한편으로 curl과 libcurl은 항상 명시적으로 사용을 알리지 않는 많은 애플리케이션에서 사용됩니다. 따라서 이 옵션을 직접 사용하지 않는다고 해서 시스템의 다른 애플리케이션이 일부 백그라운드 작업에서 이 옵션을 사용할 수 있으므로 이 취약점을 무시해도 안전하다고 생각해서는 안 됩니다.
흥미롭게도, 정확히 동일한 코드에서 동일한 문제를 해결한 최초의 취약점인 CVE-2021-22898은 공개 당시에는 20년 2개월이 지난 코드를 수정하는 것이었습니다. 이 게시물에서 설명하는 현재 수정 사항은 정확히 동일한 코드를 수정하기 때문에 모든 의도와 목적을 고려할 때 20년 4개월이 지난 코드를 수정하는 것입니다. 만약 그런 콘테스트가 있었다면, 아마 이 두 가지가 '취약점이 가장 오래 존재한 취약점'이라는 상을 놓고 경합을 벌였을 것입니다.
TuxCare 팀은 Lifecycle 연장 지원 서비스가 적용되는 Linux 배포판에서 알려진 모든 취약점을 테스트하고 수정하기 위해 최선을 다하고 있습니다. 이 서비스 및 기타 TuxCare 서비스에 대한 자세한 내용은 여기에서 확인할 수 있습니다.