gnuboard / gnuboard5

그누보드5 (영카트 포함) 공개형 Git
Other
308 stars 247 forks source link

세션 고정 취약점 #257

Closed kkigomi closed 1 year ago

kkigomi commented 1 year ago

그누보드는 현재 로그인 처리가 완료된 이후 세션 ID를 교체하지 않고 그대로 사용하고 있습니다.

https://github.com/gnuboard/gnuboard5/blob/641656047d6a9002802383f787a8925888950459/bbs/login_check.php#L65-L70

패스워드 검증 등의 과정을 거친 후 현재 세션에 필요한 데이터를 기록하여 접속자를 로그인 상태로 만드는 세션 데이터를 기록하고 있습니다. 이 과정에서 세션ID를 변경하지 않고 그대로 사용하기 때문에 공격자가 지정한 세션 ID를 공격 대상자의 쿠키를 조작하여 교체하면 세션 고정 취약점으로인한 공격이 성공하게 됩니다. 세션 고정 취약점에는 ss_mb_key는 사실상 의미가 없습니다.

그누보드는 1~2개월에 하나 이상의 취약점이 계속 발견되고 고쳐지고 있습니다. 이런 취약점으로 다양한 공격이 가능한 방법이 있고 세션 고정 취약점 또한 공격자의 대상이 될 수 있습니다.

이 문제는 세션 쿠키를 생성할 때 HttpOnly로 생성하게 하고, 로그인 처리 과정에서 session_regenerate_id() 함수로 세션 ID를 교체하는 처리가 필요합니다.

https://github.com/gnuboard/gnuboard5/blob/641656047d6a9002802383f787a8925888950459/common.php#L224-L225

다음과 같은 두 가지 조치가 필요해 보입니다.

  1. 로그인 처리(자동로그인 포함) 과정에서 세션 ID 교체
  2. 세션 쿠키를 HttpOnly로 생성하도록 개선

관련 링크

thisgun commented 1 year ago

안녕하세요. SIR 입니다.

알려주셔서 감사합니다.