Nate's Tumble Log 에 올라온 (http://n8.tumblr.com/post/117477059/security-hole-found-in-rails-2-3s) 내용으로
RubyonRails.Org (http://weblog.rubyonrails.org/2009/1/2/this-week-in-edge-rails) 에서 소개된 "HTTP Digest Authentication" 의 보안오류에 대해 짚어보기로 하자.

Ruby on Rails 2.3 의 보안 오류 는 RailsInside.com (http://www.railsinside.com/) 에 2009년 6월 3일에 소개되었다.

더보기


RubyonRails.Org 에서 소개된 샘플 코드를 보면, authenticate 은 Users 해쉬 를 HTTP Digest Auth 요청을 받아 진행하게 되어 있다.
해쉬를 부를때 아무런 값을 넣지 않고 불러오게 되면 "Nil" 이 리턴이 된다. Rails 의 digest authentication 루틴에서는 nil 에 대한 반응으로 authentication 실패로 받아들인다. 하지만 암호(password) 가 빈칸으로 제공이 된다면.. 입력된 nil 과  리턴된 nil 이 즉 nil==nil 이 되어 실패 값이 아닌 성공값이 되어 인증 성공이 되어 버린다.

2.3 Ruby on Rails 에서 위의 방법으로 인증을 거친다면, 사용자 이름 및 암호에 아무런 값을 넣지 않아도 인증 성공이 되어 버린다.

예로 http://authbroken.heroku.com/ 싸이트를 방문하면 인증을 거치는데 그냥 확인을 누르게 되면 "you needed a password to see this... ( 암호를 넣어야 볼 수 있는 페이지 입니다..." 라는 문구를 볼 수 있다.

Ruby on Rails 의 Core 팀에서 만들어진 패치는 아니지만, 실질적으로 아래 링크된 패치를 적용시켜 인증에 대한 위험 요소를 줄여야겠다.
패치된 내용은 password_procedure 에서 nil 을 반환하면 validate_digest_response 에서 false 를 반환하도록 바꾸었다고 한다.

https://gist.github.com/d5fa1ce8be9dfe0d9d19


신고

posted by youp_han matrim



티스토리 툴바