요며칠사이에 큰 논란이 되었던 그누보드 세션취약점 10년만에 패치!!
https://sir.kr/g5_pds/6462
data 폴더에 두지않고 신규설치시 라이믹스처럼 PHP 기본세션 경로에 둡니다.
htaccess 도 추가되어 403으로 접근 금지되었습니다!
요며칠사이에 큰 논란이 되었던 그누보드 세션취약점 10년만에 패치!!
https://sir.kr/g5_pds/6462
data 폴더에 두지않고 신규설치시 라이믹스처럼 PHP 기본세션 경로에 둡니다.
htaccess 도 추가되어 403으로 접근 금지되었습니다!
이렇게 간단한 것을...
그래서 버그신고 게시판이 존재하죠….^^
공개적으로 취약점에 대해서 글을 적고 비난 하는것 보다는 버그신고를 통해서 가능 하다면 해결책까지 알려 주는게 바람직하다 생각이 드네요.
아마도 그누보드 측에서도 낡고 오래된 그누보드 코드를 수정하기 위해 지금도 고생하고 있을겁니다.
조만간 새로운 그누보드6 이 나온다는 카더라 정보가 있네요…^^
저도 제가 발견한 취약점은 버그신고 게시판에 비공개로 남겼습니다.
버그신고 게시판 가보시면 세션고정 취약점 문제 폰으로 타이핑힘든데 나름대로 정성을 담아 썼습니다. 해결 방안도 나름 적었습니다(내용 확인은 못하시겠지만요).
공개적으로 비난한건 이미 다른 사람이 공개한 깃헙 이슈로 취약점이 한달이상 방치되어있던 상태였습니다.
근데 지난 이슈들 보니 보안취약점이 깃헙 이슈에 다 올라오네요.
그런데, PHP 기본세션 경로로 동작하게 패치를 해버려서,
제가 다른 글에서 언급한 세션공유 취약점이 생겨버린 관계로, 이 후에 5.5.7.4 추가 보안패치를 했더라구요.
추가 보안패치 코드를 보니, 세션에 회원 가입일을 기록하고, 이 값을 비교하는 코드를 추가했더군요.
제가 세션 다운로드 취약점을 패치했다면, 사이트의 고유정보를 섞어서 save_path에 postfix를 추가하여 경로를 추정할 수 없게 한줄 패치했을것 같아요.
방법은 많으니 어떤 선택을 하든 해결을하면 됐긴한데 너무 주먹구구식으로 하네요.
세션고정취약점 고친것도 PHP 7이상 함수를 사용해서 그누보드 지원사양에서 오류나고요.
더구나 이 문제 해결을 위해 토큰을 생성할 문자열에 그누보드 버전을 넣어놔서 사용자들이 버전 업데이트할때마다 모든 접속자의 정상적인 세션을 만료시키게 만들어버렸습니다.
개발환경 설정을 어떻게 했는지 수정한 파일들 줄바꿈 문자열도 다 바꿔버리고 인코딩도 깨먹고 아주 난리네요.
소스가 공개되어 있고, 버전도 쉽게 유추할 수 있고, 흔히 사용하는 웹호스팅이라면 설치 경로 등 "고유정보"라고 할 만한 것들도 대부분 뻔하기 때문에 경로를 찾는 것이 어렵지는 않을 겁니다. 랜덤으로 생성하여 설정 파일에 저장해 놓은 비밀키를 사용한다면 몰라도요. 커스텀 세션 핸들러를 사용한다면 sess_ 부분도 변경할 수 있고요.
어쨌든 session.save_path 기본값은 서버 관리자의 영역입니다. CMS에서 아무리 땜빵하려고 해도 안전하지 않은 서버 세팅을 커버하는 데는 명백한 한계가 있고, 패치 전처럼 어설프게 보완하려고 하다가는 오히려 더 큰 문제가 생기곤 하지요. 서로 다른 계정의 세션이 공유되는 정신나간 호스팅이 있다면 그 업체를 공개적으로 망신주거나, 사고가 터져서 스스로 망하기를 기다리는 편이 CMS에서 반쪽짜리 패치를 계속 시도하는 것보다 훨씬 나을 것 같습니다. CMS에서는 기본값을 존중하거나, 그냥 .htaccess로 막거나, 라엘님이 다른 사이트에 쓰신 글처럼 막는 법을 가르쳐 주거나, 어느 하나만 해도 자기 책임은 다 한 거고요.
XE가 호스팅 업체들에게 "PHP 5.3 지원하든지 망하든지!"라고 엄포를 놓을 수 있었던 시절이 그립네요. CMS 개발자들이 왜 남의 똥까지 닦아 줘야 하는 건지...
댓글을 이제봤네요.
대응없이 배포했다가 오류보고받고 고쳐서 다시 배포했어요.
https://github.com/gnuboard/gnuboard5/commit/62ebce3d9c3b2c9a9b613dcd86b2c775d857a5b7