플러그인 및 테마 개발자: 이것이 우리 SDK의 보안 취약성에서 배울 수 있는 것입니다.
게시 됨: 2019-03-02이번 주는 보안 취약점을 처리해야 했기 때문에 우리 팀에게 매우 힘든 시간이었습니다. 보안은 우리에게 최우선 과제이며 이것은 4년 만에 SDK에서 발견된 첫 번째 주요 취약점입니다. 불행히도 다른 소프트웨어와 마찬가지로 개발자도 인간이므로 인디 개발자든, 20명 규모의 테마 샵이든, Google이든 실수는 발생합니다. 이 기사의 목적은 무엇보다도 투명성이지만, 또한 우리가 사건을 처리한 방법과 그로부터 배울 수 있는 것에 대한 통찰력을 제공하는 것입니다.
2019년 2월 25일 월요일, WooCommerce 리포지토리에서 GitHub 문제를 우연히 발견한 유용한 개발자로부터 지원 이메일을 받았습니다. 이 문제는 서버에서 의심스러운 활동을 발견한 소규모 호스팅 회사의 담당자가 만들었습니다. 담당자는 두 가지 잠재적인 공격을 나타내는 관련 활동 로그를 포함했으며 그 중 하나는 Freemius SDK를 실행하는 플러그인을 대상으로 하고 있었습니다.
우리는 보안을 매우 중요하게 생각하기 때문에 즉시 철저한 조사를 수행했으며 취약점이 실제로 우리 SDK에 있음을 확인했습니다.
취약점의 심각성으로 인해 우리는 즉시 수정 작업을 시작했습니다. 몇 시간 만에 패치된 태그를 출시하고 취약한 SDK 버전을 사용하는 모든 개발자에게 최대한 빨리 모든 제품에서 SDK를 업데이트하도록 알렸습니다. 또한 WooCommerce 팀에 알리기 위해 원래 GitHub 문제를 업데이트했습니다(노출을 줄이기 위해 몇 시간 후에 제거한 GH 문제).
노출을 완화하고 모든 사람에게 고정 버전으로 업데이트할 수 있는 "유예" 기간을 주기 위해 개발자에게 두 가지 사항을 요청했습니다.
(a) 이 보안 업그레이드가 변경 로그에 포함될 경우 "보안 수정"과 같은 일반적인 문구만 사용하십시오.
(b) 패치된 버전을 업데이트하고 출시한 후에도 다음 30일 동안 이 문제를 공개하지 마십시오. 모든 파트너와 해당 사용자가 업데이트할 수 있는 충분한 시간을 허용하십시오.
바로 하루 후, 플러그인 취약점을 다루는 웹사이트(의도적으로 플러그인에 연결하거나 이름을 언급하지 않음)는 영향을 받는 플러그인 중 일부의 이름을 지정하면서 이를 악용하는 방법에 대한 정보를 포함하여 취약점에 대한 게시물을 게시했습니다. 플러그인 및 테마 개발자에게 문제에 대해 알린 지 24시간도 채 되지 않았기 때문에 이것은 우리를 놀라게 했습니다. 그들은 우리에게 연락하지 않았고 우리가 상당히 무책임하고 비윤리적이라고 생각하는 책임 있는 공개 시장 관행을 따르지 않았습니다.
노출을 줄이고 더 많은 해커로부터 원치 않는 관심을 끌기 전에 개발자와 사용자에게 패치된 버전으로 업데이트할 기회를 주기 위해 보고서를 일시적으로 게시 취소해 달라고 요청했습니다. 그런데 연락을 한 번도 하지 않은(물어보니) 이름을 밝히지 않은 그 사람은 나름의 의로운 사상이 있고, 상식이 통하지 않는 것 같다. 나는 문제 상황과 이로 인해 많은 개발자와 사용자에게 노출되는 위험 증가에 대해 설명하려고 했지만 내 노력은 귀에 들리지 않았고 이메일 교환이 시간 낭비라는 것을 깨달았습니다.
개발자 커뮤니티에서 플러그인과 테마를 새로 패치된 SDK로 업데이트하면서 두 가지 문제를 발견했습니다.
- 일부 개발자는 확인하지 않는 이메일 주소로 Freemius에 등록했기 때문에 경고 이메일을 받지 못했습니다.
- 관심을 끌지 않기 위해 의도적으로 패치된 GitHub 태그를 공식 릴리스로 플래그 지정하지 않았습니다. 그러나 Composer를 사용하여 라이브러리를 업데이트하는 개발자는 태그를 명시적으로 지정하지 않는 한 packgist가 릴리스만 가져오기 때문에 최신 업데이트를 받지 못한다는 것을 알게 되었습니다.
이러한 문제를 극복하려면:
- 취약점이 이미 공개적으로 게시되었기 때문에 이틀 전에 우리는 패치된 버전을 공식 릴리스로 표시하여 packgist에 의존하는 개발자가 업데이트할 수 있도록 했습니다.
- 오늘 아침 일찍 우리는 아직 모든 제품에서 SDK를 업데이트하지 않은 개발자들에게 또 다른 일괄 메시지를 이메일로 보냈습니다. 이번에는 모든 사람이 이메일을 제대로 받을 수 있도록 공식 지원 채널로 메시지를 보냈습니다.
우리는 이 취약점의 공개를 최소 2주 연기하고 싶었지만 WP Tavern이 개발자의 키보드를 망가뜨린 지푸라기라는 주제에 대한 자체 기사를 게시하기 전에 우리의 의견을 묻는 추가 질문을 받았습니다.
우리가 저지른 실수와 그로부터 배울 수 있는 것
사건을 돌이켜보면 우리는 쉽게 피할 수 있었고 모두의 삶을 훨씬 더 쉽게 만들 수 있었던 몇 가지 실수를 저질렀습니다.
무음 모드로 전환하고 알아야 할 사람들에게만 알림
하루빨리 문제를 해결하고 싶었기 때문에 너무 일찍 원치 않는 관심을 끌었던 "신인" 실수를 저 스스로 저질렀습니다. 계속해서 SDK를 관리하는 데 사용하는 GitHub 리포지토리에 수정 사항을 커밋했습니다. 저장소가 공개되어 있을 뿐만 아니라 수정 사항을 설명하고 "보안"이라는 단어를 사용했습니다.
더 나은 접근 방식은 저장소의 비공개/폐쇄 버전을 만들고 보안 문제를 패치한 다음 공개하는 대신 관련 개발자에게만 공개하는 것이었습니다. 이것은 "취약점 사냥꾼"의 관심을 끌지 못할 것입니다.
"보안 트롤"에 에너지를 낭비하지 마십시오
두 번째 실수는 취약점을 게시한 사이트 뒤에 있는 회사와 상호 작용하려고 시도한 것입니다. 그것은 시간과 에너지의 총체적인 낭비였으며, 취약점에 대한 또 다른 게시물로 끝나는 더 많은 적대감을 촉발했습니다. 플러그인이나 테마 사용자를 위험에 빠뜨리는 게시물의 작성자에게 연락할 가치가 있는지 여부를 결정하는 좋은 지표는 게시물/웹사이트/회사 뒤에 이름이 있는지 여부입니다. 대리인 뒤에 숨어서 비합리적으로 행동한다면 그들에게 의미를 말할 수 있는 가능성은 거의 제로입니다.
이것이 제 조언입니다. 무음 모드로 전환하고 취약성에 대해 알아야 하는 사람들에게만 알리십시오. 플러그인/테마의 경우 사용자입니다. 이것은 또한 사용자의 이메일 수집의 중요성을 강조할 수 있는 좋은 기회입니다. 사용자와 개인적으로 통신할 수 있는 방법이 없으면 보안 문제에 대해 개인적으로 알릴 효과적인 방법이 없습니다.
사건의 현황
SDK를 사용하는 개발자의 60% 이상이 이미 패치 버전으로 업그레이드했습니다. 또한 SDK에는 동일한 WordPress 웹사이트에 설치된 여러 Freemius 지원 플러그인 또는 테마가 제품 중 하나가 이미 업데이트된 경우 최신 버전의 SDK를 사용할 수 있는 특별한 메커니즘이 함께 제공됩니다. 그래서 좋습니다.
하지만 여전히 취약한 사이트가 많이 있습니다. 그렇기 때문에 취약점 자체나 영향을 받는 제품에 대한 기술적 세부 사항을 언급하지 않았습니다. 우리는 여전히 개발자에게 제품을 패치하고 사용자가 보안 버전으로 업데이트할 수 있는 기회를 제공하고자 합니다.
WordPress 플러그인/테마에서 보안 위험을 줄이는 방법은 무엇입니까?
보안 배경이 없는 경우 Google의 "웹 보안 모범 사례"에서 수많은 기사와 사례를 찾을 수 있습니다. 현대적이고 일반적인 잠재적 위험과 실수에 대해 알아보려면 몇 가지를 읽으십시오. 개발 및 테스트 프로세스 중에 이를 염두에 두십시오. 또 다른 좋은 방법은 보안 연구원을 고용하여 정기적인 보안 감사를 실행하는 것입니다. 비용은 수백 달러가 들지만 주요 수입원으로 제품에 의존하고 있다면 생각할 필요가 없습니다.
불행히도 우리의 경우와 마찬가지로 여전히 나쁜 일이 발생할 수 있습니다. 우리는 매우 강력한 보안 배경을 가지고 있지만 철저한 코드 검토를 수행하고 HackerOne 커뮤니티의 숙련된 보안 연구원과 협력하지만 이 취약점은 여전히 균열을 통과합니다. 😔
그런 일이 발생한 이유 중 하나는 취약한 코드가 실제로 디버그 엣지 케이스에 추가되었고 SDK의 핵심 기능의 일부가 아니기 때문이라고 생각합니다. 따라서 여기에 교훈이 있다면 실제 비즈니스 논리의 일부이든 다른 어떤 것이든 제품의 모든 코드를 동일한 방식으로 처리하십시오.
요약
소프트웨어 세계에서 보안 문제는 불가피합니다. 좋든 싫든 언젠가는 플러그인이나 테마에 보안 문제가 발생합니다. 문제는 코드, 사용 중인 라이브러리/프레임워크, 예기치 않은 결과를 제공하는 WordPress 핵심 방법 및 더 많은 시나리오에 있을 수 있습니다.
그런 일이 일어나면(그렇지 않기를 바랍니다), 스트레스를 받지 말고(우리는 확실히 그랬습니다) 충동적으로 행동하십시오. 더 많은 피해를 입힐 뿐입니다. 방법론적 복구 계획 초안을 작성하고 영향을 받는 당사자에게 알리고 사용자가 사이트를 보호할 수 있도록 도와주십시오. 보안 문제가 발생한다는 것은 누구나 알고 있습니다. 더 중요한 것은 상황에 대처하는 방법입니다.
즉, 전체 Freemius 팀을 대신하여 불편을 끼쳐 드려 진심으로 죄송하며 주말 내내 문제와 관련된 지원, 조언 또는 기타 도움을 제공할 것입니다. 그리고 우리의 새로운 사용자들에게 첫인상이 얼마나 중요한지 압니다. 그리고 이것은 확실히 좋은 것이 아닙니다. Freemius에 또 다른 기회를 주고 시간이 지나면서 WordPress 플러그인 및 테마에 대해 제공하는 놀라운 기능을 확인하시기 바랍니다.