Pages

3/11/2011

Becoming Admin in any blog on Blogger.com

 อันนี้เป็นช่องโหว่ที่ค้นพบโดย Nir Goldshlager  ซึ่งได้แจ้งให้ทาง Google รับรู้และได้รับการ patch เรียบร้อยแล้ว  รวมถึงGoogleได้ให้เงินรางวัลในการค้นพบช่องโหว่นี้เป็นเงิน $1337  (เพื่อจะเป็นคำว่า leet ที่มาจากคำว่า elite แปลว่า คนที่เก่งเทพ ยอดเยี่ยม ก็ว่ากันไป)

น่าสนใจที่ว่า ช่องโหว่นี้ สามารถทำให้ attacker สามารถเข้าไปเป็น admin ของ "บล๊อคไหนก็ได้" บนblogger.com  นี่ยากแล้วเพราะช่องโหว่ก็ต้องเป็นช่องโหว่ที่ผิดตรงแกนหลักของตัวเวปเลย
และช่องโหว่ตรงนี้ก็ไม่ได้อะไรมากด้วย เพียงแค่เป็นการแก้ค่า HTTP POST request เท่านั้นเอง

ขั้นตอนคร่าวๆของที่เขาทำก็คือ
 1. attacker หลอกระบบว่าจะเพิ่มนักเขียน(author) ให้กับblogของattacker แต่หากว่าสิ่งที่ทำจริงๆคือ ทำกลับกัน  คือแอดตัวattackerเอง เป็นauthorของระบบblogของเหยื่อ(victim)
 2. เมื่อ attacker ได้สิทธิ์เป็น authorแล้ว  ก็ดำเนินการต่อโดยเพิ่มสิทธ์ตัวเองให้เป็น admin  ซึ่งก็ใช้หลักการเดียวกัน  หลอกว่าหน้าblogของattackerเอง จะให้สมาชิกผู้เขียนคนนึงกลายเป็นadmin  แต่กลับทำให้ผลลัพธ์ตรงกันข้าม

มาดูขั้นแรกกันก่อน ถ้าattacker ต้องการที่จะเพิ่ม author ขึ้นมาซักคน  URL ที่มีการrequest จะเป็นแบบนี้
POST /add-authors.do HTTP/1.1
แล้วจะส่งข้อมูลไปทำนองนี้

security_token=attackertoken&blogID=attackerblogidvalue&authorsList=newauthor_email%40gmail.com&ok=Invite
ก็ธรรมดาทั่วๆไปว่า ถ้าอยากจะaddคนเพิ่ม ก็ต้องบอกก่อนว่าตัวเองได้สิทธิ์เข้ามาถึงเมนูแก้ไขนี้รึเปล่า(ผ่านทางsecurity_token) แล้วจะแก้ไขบล็อกไหน(blogID) และจะเพิ่มใครเข้าไป(authorList)

ใครจะรู้ว่าเขาจะเพิ่ม blogID ให้มีสองอันได้???   กลายเป็น
security_token=attackertoken&blogID=attackerblogidvalue&blogID=victimblogidvalue&authorsList=attacker_email%40gmail.com&ok=Invite
กลายเป็นว่า ทาง blogger จะใช้ security_token ดูว่าโอเคมีสิทธิ์เข้ามาแก้ไขได้ผ่าน
blogID ตัวแรกเอาไว้เช็คว่าตรงกับ security_token  ผ่าน
blogID ตัวที่สอง จะเป็นตัวที่ถูกแก้ไขจริง  ดังนั้นนี่ก็แทบจะเพิ่ม author โดยไม่ต้องการ credential อะไรของเจ้าของ blogนั้นๆเลย


หลังจากแก้ไข และยิงคำสั่งนี้กลับเข้าระบบ  ก็ไปเช็คemailได้ (attacker_email@gmail.com) ก็จะมีเมลล์มาให้กดเพื่อยอมรับการเป็นผู้แต่งให้กับเวปบล๊อกของ victim แล้ว

แต่ปัญหาคือ .. สิทธิ์ Author มันทำอะไรมากไม่ได้ ต้องเป็น admin..  จะทำยังไง???

ตรงนี้ก็เลยต้องทำขั้นตอนที่ 2 ต่อ
ก็ใช้หลักการวิธีเดิมเลย  เข้าระบบเป็นฐานะ attacker ทำท่าจะเพิ่มสิทธิ์ admin ให้กับใครซักคน เพื่อดูว่าจะต้องใช้ข้อมูลแบบไหนที่ต้องส่งไปให้ Blogger.com  ซึ่งก็จะได้ข้อมูลคร่าวๆตามข้างล่าง
POST /team-member-modify.do HTTP/1.1
ข้อมูลทั่วไปที่ส่งไปก็จะเป็นแบบนี้
security_token=attackertoken&blogID=attackerownblogid&memberID=tobeadmin_memberid&isAdmin=true&ok=Grant+admin+privileges
จะเห็นว่าส่วนแรกๆ ค่า security_token กับ blogID ก็เหมือนเดิม
และถ้าเราปล่อยให้มันทำไปโดยไม่ทำอะไร  มันก็จะทำให้ author ที่ชื่อ tobeadmin_memberid จะกลายเป็น adminไป  ดังนั้น การโจมตีเลยต้องโจมตีแบบนี้

security_token=attackertoken&blogID=attackerownblogid&blogID=victimblogidvalue&memberID=attackermemberid&isAdmin=true&ok=Grant+admin+privileges

 สีน้ำเงินนี่คือเพิ่มเข้ามา จะเห็นว่า ก็ใช้ blogID สองตัวเหมือนเดิม
โดยตัวแรกเป็นตัวเช็คความปลอดภัย ส่วน blogID ตัวที่สองนี่จะเป็นตัวที่ต้องการจะให้ส่งผลถึง
และสุดท้าย memberID นี่ก็ต้องหาทางหา memberID ของ attacher มาให้ได้
คนๆนั้นก็จะได้สิทธิ์ admin ได้ง่ายๆแล้ว


วีดีโอต้นฉบับ แสดงการทำช่องโหว่นี้


ย้ำอีกที  ช่องโหว่นี้ patched เรียบร้อยแล้ว



REF:
http://www.nirgoldshlager.com/2011/03/blogger-get-administrator-privilege-on.html

No comments:

Post a Comment