동료 @owengot와(과) 이야기를 나눈 후, 문제에 대한 보다 자세한 설명을 드리겠습니다.
해당 웹 애플리케이션은 Vue.js 기반이며 자체적인 서버 사이드 컴포넌트가 없습니다. 대신 Discourse API를 사용하는 독립형 웹 애플리케이션으로, 일종의 서버 역할을 Discourse가 수행합니다. 사용 사례로는 독립형 투표나 양식이 있으며, 콘텐츠는 사용자의 계정 하에 있는 Discourse 토픽에 게시됩니다. 이러한 용도에서 커스텀 서버 사이드 컴포넌트 없이 이러한 소프트웨어를 만들 수 있다는 것은 좋은 아키텍처로 보였기 때문에, 이상적으로는 “서버 사이드” 작업을 피하는 것이 좋습니다.
현재 사용자 API 키를 얻는 과정은 의도대로 작동하지만, @owengot는 JavaScript에서 개인 키를 생성하는 단계가 오래 걸린다는 것을 발견했습니다(최대 10초까지 걸리며, JavaScript에서 비효율적인 탓입니다…). 그 후 그는 동일한 개인 키를 여러 사용자에게 사용할 수 있다는 해킹 기법을 발견했고, 웹 애플리케이션의 다른 정적 파일(JS, CSS 등)을 서빙하는 웹 호스트에 있는 파일에 이를 저장했습니다. 이렇게 하면 빠르지만 … 이제 그 개인 키는 (1) 공유 키가 되고 (2) 공개적으로 접근 가능한 URL로 외부에 노출되어 저장됩니다. 이건, 음, 무섭습니다 ![]()
그래서 저는 이 해킹 기법의 보안 영향에 대해 Discourse 팀에게 질문해야 한다고 말했습니다. 두 가지 기본적인 대안을 보고 있습니다:
-
만약 그 개인 키가 “단순히” 페이로드 암호화에 사용된다면, 통신이 SSL / HTTPS를 통해 암호화되어 있으므로 이를 수용할 수 있을 것입니다.
-
그러나 그 개인 키를 알면 나중에 누군가의 Discourse 계정으로 게시하는 데 사용되는 최종 사용자 API 키를 계산할 수 있게 된다면, 이 해킹 기법은 당연히 허용할 수 없게 됩니다.