환경 설정에서 2단계 인증 키를 삭제한 후 관리자가 사이트에서 잠금 해제됨

재현 단계

  1. 보안 키나 인증 앱과 같은 2단계 인증 키가 하나 이상 활성화된 최신 Discourse 사이트에서 관리자 권한을 보유해야 합니다.
  2. 해당 2단계 인증 키를 사용하여 성공적으로 로그인 및 로그아웃할 수 있어야 합니다.
  3. 2단계 로그인 강제 사이트 설정이 “no”(아니오)로 되어 있는지 확인하십시오.
  4. 관리자 사용자 프로필 설정의 보안 탭에서 제공되는 표준 UI 도구를 사용하여 계정(관리자)의 모든 2단계 인증 항목을 삭제하십시오.
  5. 로그아웃하십시오.

예상 동작

  1. 사용자 이름 또는 비밀번호로 사이트에 로그인; 접근 허용; 또는
  2. "이메일로 링크 보내기"로 사이트에 로그인; 접근 허용.

실제 동작

두 가지 “예상” 시나리오 모두 오류 메시지와 함께 실패하며, 로그인이 허용되지 않습니다:

선택한 2단계 인증 방법이 계정에 활성화되어 있지 않습니다.

관리자 계정으로 로그인할 수 있는 다른 방법은 없습니다.


참고로, 해당 사이트에서 실제로 잠금 상태에 걸린 것은 아닙니다. 다른 컴퓨터에서 여전히 활성 상태인 세션이 있었기 때문에, 해당 세션으로 이동하여 토큰 기반 인증기를 다시 추가하여 다시 로그인할 수 있었습니다. 그러나 다른 세션이 없었다면 “완전히” 잠금 상태에 놓였을 것입니다.

10개의 좋아요

리포트해 주셔서 감사합니다. 지난 며칠 동안 북마크해 두었지만 아직 테스트를 해보지 못했습니다. 말씀하신 내용이 정확할 것으로 생각하지만, 다음 주에 자세히 확인해 보겠습니다.

4개의 좋아요

이것이 버그인 것 같습니다. 사이트 설정에 모든 관리자가 2FA를 활성화해야 한다고 되어 있으면 이를 허용해서는 안 됩니다.

완전히 잠금 상태는 아니라고 생각하며, 현재 콘솔을 사용하여 복구할 수 있지만, 병리적 상황을 쉽게 만들 수 있게 해서는 안 됩니다.

그것이 올바른 논리인지 조금 확실하지 않습니다. 이중 인증 강제 옵션을 기본값인 “아니오” 외에는 어디에도 켜지 않은 상태였는데, 모든 설치 환경에 관리자 계정이 하나 이상 있다고 가정하는 것은 실제로 안전하지 않습니다. 프로필에서 2FA 키가 제거된 후 어딘가에서 다른 플래그가 제거되지 않는 것 같습니다…

완전히 잠금 해제된 상태는 아니므로, 지금은 콘솔을 사용하여 복구할 수 있다고 생각합니다

이것은 유효한 비상 대안일 수 있지만, 서버를 직접 관리하지 않는 관리자라면 이 작업이 그들의 기술 범위를 벗어날 수 있으며, 시스템 관리자를 찾아야 할 수도 있습니다.

4개의 좋아요

복구 코드는 그대로 남아 있는지 궁금합니다. 그중 하나를 입력해 보실 수 있을까요?

1개의 좋아요

@Osama 코드를 수정하고 계신다면, 혹시:

  • 사용자가 이 2FA를 삭제한 후 다시 로그인할 수 없게 되는 경우 (마지막 2FA이며, 신뢰 수준 설정/관리자 설정에 따라 계정에 2FA가 필수인 경우)

  • THEN 마지막 2FA 삭제를 허용하지하고 오류 메시지를 표시합니다.

1개의 좋아요

같은 버그(디스코스 버전 2.7.10, 오늘 업그레이드)에 걸린 것 같습니다.

관리자 권한을 부여받았고 2FA를 활성화했습니다. 그 후, 관리자 전용으로 사용할 두 번째 사용자를 다른 이메일로 생성하고 해당 계정에 관리자 권한을 부여했습니다.
이어서 원래 계정에서 관리자 권한을 제거하고 모든 2FA 방법을 삭제했습니다. 이제 원래 계정에서는 OP가 언급한 오류가 발생합니다.
이 서버에 콘솔 접근 권한이 없습니다. 사이트는 관리자에게 2FA를 강제하지 않습니다.

이 문제를 해결하기 위해 콘솔에서 정확히 무엇을 해야 하는지 자세히 알려주시겠습니까.

참고로 이렇게 한 이유는, 일반 사용자로 사이트의 개인 그룹에 대한 일반 권한 및 알림(또는 비활성화)을 적용받고 싶고, 메일링 리스트 모드를 활성화할 수도 있기 때문입니다. 일반 사용자로 2FA라는 추가적인 번거로움은 필요하지 않습니다.

물론 관리자 계정은 모든 것을 볼 수 있으므로, 과도하게 구경하지 않는다는 신뢰에 기반합니다. 해당 계정은 모든 알림을 꺼 두고 메일링 리스트 모드를 비활성화할 수 있습니다.

1개의 좋아요

복구 코드는 2단계 인증 로그인 흐름에서만 사용할 수 있으므로, 복구 코드를 사용할 기회가 없을 것 같습니다.

@sam 이 문제가 콘솔을 통해 해결될 수 있다고 유혹하듯 말씀하시면서도, 구체적으로 무엇을 해야 하는지는 언급하지 않으셨네요. 이 특정 문제를 어떻게 해결할 수 있는지 방향을 알려주시면 정말 감사하겠습니다.

이게 도움이 될까요?

2개의 좋아요

그런 것 같지는 않습니다. 해당 계정은 이미 2FA가 비활성화되어 있거나, 좀 더 정확히 말하면 계정에서 모든 2FA 방법이 제거된 상태(프로필에서 2FA가 "없음"으로 표시됨)인데도 불구하고, 로그인 시 여전히 2FA를 사용하려는 시도 때문입니다.
해당 가이드는 2FA가 활성화되어 있지만 유효한 토큰을 생성할 수 있는 수단을 분실하거나 잊어버린 사용자를 위한 것입니다.

해결 방법: 관리자 계정으로 잠금 해제된 사용자의 상세 페이지를 방문한 후, 오른쪽으로 스크롤하여 맨 아래로 내려간 다음 빨간색 임의 사용자(Impersonate) 버튼을 클릭하세요.
그다음 사용자 설정에서 2FA(이중 인증) 방법을 추가해야 합니다. (이 작업을 수행하려면 해당 사용자의 비밀번호가 필요합니다.)
2FA 시크릿 키는 잠금 해제된 사용자에게 전달해야 합니다.
이 경우 저는 두 계정 모두를 관리하고 있으므로 어려운 작업은 아닙니다. :wink:

1개의 좋아요

좋네요. :+1::slightly_smiling_face:

그렇게 했더니 나중에 사용자의 2FA를 성공적으로 제거할 수 있었나요?

아니요. 2FA 방법을 제거했더니 사용자가 다시 잠금 상태가 되었습니다.

«Disable All» 버튼을 눌러 2FA를 제거하는 방식과 마지막 2FA 방법을 제거하는 방식이 다르게 작동하나요? 즉, 해당 버튼을 누르면 계정 잠금 없이 2FA가 제거되나요?

콘솔을 사용하여 이를 재현하고 해결책을 찾았습니다.

재현 방법은 첫 번째 게시글에 설명된 내용과 약간 다릅니다. 2단계가 중요하며, 3단계와 4단계는 중요도가 낮습니다.

  1. 보안 키 및 인증 앱과 같은 2단계 인증 키가 하나 이상 활성화된 최신 Discourse 사이트에서 관리자 사용자로 로그인합니다.
  2. 백업 코드 활성화
  3. 해당 2단계 인증 키를 사용하여 성공적으로 로그인 및 로그아웃할 수 있어야 합니다.
  4. 2단계 로그인 강제 사이트 설정이 “아니오”로 설정되어 있는지 확인합니다.
  5. (관리자) 계정의 프로필 설정 > 보안 탭의 표준 UI 도구를 사용하여 모든 2단계 인증 항목(인증 앱 및 보안 키)을 삭제합니다.
  6. 로그아웃합니다.

모든 2단계 인증 항목이 제거된 경우에도 데이터베이스에는 여전히 백업 코드가 남아 있으며, 로그인 시 2단계 인증이 비활성화된 것으로 인식되지 않습니다.

인증 앱이나 보안 키가 더 이상 없으므로 사용자는 백업 코드를 사용할 수 없습니다.

모든 인증 앱과 키가 제거된 후에는 프로필 > 보안에서도 백업 코드를 삭제할 수 없습니다.

제안된 수정 사항: 사용자의 마지막 보안 항목이 제거될 때 백업 코드도 함께 제거되어야 합니다.

우회 방법: 데이터베이스에서 해당 사용자의 모든 UserSecondFactor 기록을 삭제합니다.

UserSecondFactor.where(user_id: 1).delete_all

12개의 좋아요

새로운 Discourse 버전에서 이 문제를 해결할 수 있는 패치가 적용될 수 있을까요? 오늘 저에게 정확히 같은 일이 발생했는데, 계정을 복구하는 데 꽤 고생했습니다.

1개의 좋아요

로그인 문제를 호소하는 사용자와 동일한 문제를 겪고 있습니다. 해당 사용자는 이전에 계정에 2단계 인증(2FA)을 활성화했다가 나중에 해제했습니다. 로그인 시도를 할 때 다음과 같은 오류 메시지가 표시됩니다:

선택한 2단계 인증 방법이 계정에 활성화되어 있지 않습니다.

  • 관리자 메뉴에서 확인해 보니, 해당 사용자의 프로필에 '2단계 인증’이 '아니오’로 표시되어 있습니다.

  • 이 우회 방법(Admin locked out of site after deleting two-factor keys from prefs - #13 by ewblen)을 적용하기 위해 사용자의 비밀번호를 가지고 있지 않으며, 설령 가지고 있더라도 제가 해당 위치에 추가할 2FA 방법이 없습니다.

  • 사용자에게 비밀번호를 묻는 것은 적절하지 않으므로, 이메일 주소를 변경하거나 제가 관리하는 보조 이메일을 추가하는 방법을 시도했습니다. 그러나 확인 이메일 URL에서 '확인’을 클릭하면 다음과 같은 오류가 발생합니다:

선택한 2단계 인증 방법이 유효하지 않습니다.

… 그리고 이메일 주소가 변경되거나 추가되지 않습니다.

  • 이 Discord 설치 환경은 '관리형’이므로 콘솔이나 데이터베이스에 접근할 수 없습니다.

기타 시도해 볼 수 있는 방법이 있을까요? 아니면 사용자는 영원히 계정에 접근할 수 없게 되는 건가요?

이것은 정말 끔찍한 상황입니다.

저는 '호스팅’된 Discourse 인스턴스이므로 discourse 콘솔에 접근할 수 없습니다.

관리자는 관리자 인터페이스에서 2FA(2단계 인증) 설정을 초기화할 수 있어야 합니다. 사용자에게 비밀번호를 요청하는 것은 매우 전문성이 떨어지는 행위입니다.

이것은 분명히 해결되어야 하는 중대한 버그입니다. 이를 어떻게 공식적으로 보고하고 버그 수정 진행 상황을 추적할 수 있을까요?

오픈소스 프로젝트의 호스팅 Discourse 인스턴스 사용자로, 저는 콘솔이나 데이터베이스에 접근할 수 없으며 관리자 인터페이스만 사용할 수 있습니다.

실제로 저는 이에 동의하지 않습니다. 2FA가 비활성화되면 2FA 백업 코드는 완전히 무시되어야 하며 아무런 영향도 미치지 않아야 합니다.

잘못된 위치에서 이 문제를 수정하면(마지막 2FA 방식이 제거될 때 백업 코드를 제거하는 방식), 여전히 로그인하지 못하고 보고조차 하지 않은 채 포기한 사람들이 남게 됩니다.

실제 버그(2FA가 비활성화되었을 때 백업 코드를 고려하는 것)를 수정하면, 새로운 사용자에게만 이 문제가 반복되지 않도록 하는 것이 아니라, 영향을 받은 100%의 사용자에게 즉시 해결됩니다.

저에게는 효과가 있었습니다. 사용자가 비밀번호를 알려주었거든요.

2FA를 직접 비활성화해서는 안 되며, 먼저 다음 단계를 거쳐야 합니다:

  • 모든 2FA 백업 코드를 삭제
  • 모든 2FA 백업 코드가 삭제되었는지 세 번 확인
  • 그 후에야 2FA를 비활성화

이 방법을 사용하면 실제로 2FA를 비활성화할 수 있습니다. 이는 이 문제를 해결하기 위해 사용자를 시뮬레이션하는 관리자 사용자에게도 해당되며, 단순히 2FA를 비활성화하려는 일반 사용자에게도 동일하게 적용됩니다.