| [Hỏi đáp] Re:Thảo luận: cross site request forgery (CSRF hay XSRF) |
03/02/2007 13:32:38 (+0700) | #1 | 39720 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/9828953e86b84545c7a6cace2b0d62b0.png)
|
nora
Elite Member
|
0 |
|
|
Joined: 20/09/2006 00:08:43
Bài gởi: 360
Đến từ: UK
Offline
|
|
Mình thấy Topic này của huynh Conmale rất thú vị, mình chưa bao giờ nghĩ tới vụ "mượn dao" này.
Đọc qua phần http://www.tux.org/~peterw/csrf.txt thì thấy trên này họ cũng nêu cách khắc phục
> How can it be fixed? Well, there are a couple of ways to stop it, but the
> easiest (in PHP at least) seems to be to have most of the variables used by
> scripts be used through $HTTP_POST_VARS. So instead of checking for $action
> in a script, $HTTP_POST_VARS['action'] would be checked. This forces the
> user to use a POST request, not a GET.
which means the attacker reverts to using Javascript, or entices the victim
to click on an image that's acting as a submit control in a <form>.
Requiring POST raises the bar, but doesn't really fix the problem.
> Alternatively, the sessionid could be
> required to come with the GET/POST request variables, rather than by cookie.
...thereby exposing an important piece of authentication information to
history files and proxy servers; I really don't like URL mangling for
authentication purposes, especially in non-SSL systems. A combination of
cookie + URL mangling might not be bad, though in the message board case, a
CSRF attacker could use an intermediate redirect (as described earlier) to
get the URL mangling (from the Referer), and redirect back to the
messageboard with the proper mangling as well as all cookies that might be
expected/needed. So in your example case, URL mangling would buy nothing.
> Finally, in the specific case of [img] tags, the use of ? or & in the img
> URL can be disabled by some regexes.
Not at all adequate. Browsers follow redirects on IMG tags, so I redirect
you to http://example.net/logo.gif which in turn redirects you to the final
URL, as described earlier.
> If the software that you run is not secure, we recommend that you disable
> HTML and/or [img] tags, until the fixes have been implemented.
It's much worse than that.
Please see the following URLs for an introduction to the dangers of CSRF,
and some discussion of countermeasure strategies.
http://www.astray.com/pipermail/acmemail/2001-June/000803.html
http://www.astray.com/pipermail/acmemail/2001-June/000808.html
http://www.astray.com/pipermail/acmemail/2001-June/000804.html
Theo mình nghĩ ban quản trị dường như đã fix lỗi này, vì như vậy conmale mới công bố lên đây.
vậy câu hỏi:
Cách của ban quản trị là gì?
Có phải topic này của huynh là để mọi người bàn luận và tìm ra cách tối ưu nhất hay để các members "tập suy nghĩ"?
tóm lại topic rất hay, indeed
) |
|
|
 |
 |
| [Hỏi đáp] Re:Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/02/2007 00:43:01 (+0700) | #2 | 39770 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/089f41810321eefc3f4eef5d4a388e42.png)
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Bài gởi: 9022
Đến từ: down under
Online
|
|
nora wrote:
Theo mình nghĩ ban quản trị dường như đã fix lỗi này, vì như vậy conmale mới công bố lên đây.
vậy câu hỏi:
Cách của ban quản trị là gì?
Cách của BQT có 2 phần:
- phase 1: ứng dụng random token. Token này dựa trên giá trị valid session ID của thành viên có chủ quyền là moderator + một số thông tin cá biệt khác. Ví dụ, IP của session, user-agent của session và vị trí (đang ở trên diễn đàn).... Phase 1 đã ứng dụng.
- phase 2: intermediate confirmation step. Bước này là bước đứng giữa để xác nhận moderator quả thật muốn thực thi hành động nào đó. Để bảo đảm hơn nữa, ứng dụng captchar có thể được đưa vào trong trường hợp này. Phase 2 đang viết, chưa ứng dụng )
Dù hiện tại chỉ dùng phase 1, việc giả mạo một token nào đó trùng với giá trị token được server tạo ra là một việc hiếm hoi. Bởi thế, sẽ từ từ ứng dụng phase 2 (khi rảnh).
nora wrote:
Có phải topic này của huynh là để mọi người bàn luận và tìm ra cách tối ưu nhất hay để các members "tập suy nghĩ"?
Có lẽ là cả hai. Thật ra về mặt nguyên tắc thì chỉ có bấy nhiêu hướng ứng dụng. Tuy nhiên, khai triển càng nhiều thì càng tốt vì member có dịp suy nghĩ và ứng dụng cho trường hợp cụ thể của mình.
nora wrote:
tóm lại topic rất hay, indeed
)
Cám ơn ). |
|
| What bringing us together is stronger than what pulling us apart. |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/02/2007 01:45:02 (+0700) | #3 | 39800 |
PHUCDOAN
Member
|
0 |
|
|
Joined: 04/08/2006 23:50:25
Bài gởi: 33
Offline
|
|
bác conmale đã post topic này thú vị lém, tui thích lắm và theo dõi mỗi bài post của members. Anh Conmale ít nhất cũng cho chúng ta thấy được các hacker đã lợi dụng "đường biên" của ứng dụng để hack.
hehe, thanks so much!!!!!!!!!! |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/02/2007 11:58:18 (+0700) | #4 | 39905 |
HoS
Member
|
0 |
|
|
Joined: 03/02/2007 15:07:38
Bài gởi: 43
Offline
|
|
Em cũng nghe nói về lỗi này. Nhưng em nghĩ lỗi này ko nguy hiểm lắm hoặc tại em ko hiểu rõ về nó.
Ngoài việc có thể inject vào javascript, html để khai thác cookies, hay 1 vài thông tin "xung quanh" website thì nó có thể làm gì hơn thế không? |
|
|
 |
 |
| [Hỏi đáp] Re:Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/02/2007 13:30:27 (+0700) | #5 | 39925 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/4dd20f1e87dfb889bc97230e2c87c6a5.png)
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Bài gởi: 1071
Đến từ: /dev/null
Offline
|
|
|
|
Just clear, "What I need to do and how to do it"
Box tán gẫu dời về: http://www.facebook.com/hvaonline |
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
06/02/2007 10:39:46 (+0700) | #6 | 40219 |
lyhuuloi
Elite Member
|
0 |
|
|
Joined: 04/04/2003 11:29:17
Bài gởi: 90
Đến từ: TP HCM
Offline
|
|
Em nghĩ để khắc phục khe hở trên thì nên tạo 1 hash riêng cho từng thành viên, khi đó trên mỗi URL có tác động đến những thông tin nhạy cảm thì sẽ có thêm đoạn "&mem_key=abc" trong URL, như vậy chỉ cần kiểm tra mem_key trên URL so sánh với mem_key của thành viên đó là ok  |
|
http://lyhuuloi.com  |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
06/02/2007 11:08:01 (+0700) | #7 | 40224 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/7f11b15655b2342b01a2db7edb7961cd.jpeg)
|
gamma95
Researcher
|
Joined: 20/05/2003 07:15:41
Bài gởi: 1297
Đến từ: ░░▒▒▓▓██
Offline
|
|
Việc lấy hash trong 2 trường hợp này là có thể.
Với version cũ của 1 số browse ( trình duyệt ) có lỗi có thể thực hiện Cross-Site-Cookies-Read.
Việc đọc input hidden field còn dễ hơn qua các hàm cơ bản của Javascript.
bạn nohat nói cụ thể hơn được ko?? ) |
|
| Cánh chym không mỏi |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
06/02/2007 13:23:01 (+0700) | #8 | 40240 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/4dd20f1e87dfb889bc97230e2c87c6a5.png)
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Bài gởi: 1071
Đến từ: /dev/null
Offline
|
|
|
|
Just clear, "What I need to do and how to do it"
Box tán gẫu dời về: http://www.facebook.com/hvaonline |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
08/02/2007 13:59:31 (+0700) | #9 | 40663 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/7f11b15655b2342b01a2db7edb7961cd.jpeg)
|
gamma95
Researcher
|
Joined: 20/05/2003 07:15:41
Bài gởi: 1297
Đến từ: ░░▒▒▓▓██
Offline
|
|
Hì xin được giải thích thêm ( gamma95 biết rồi còn giả chưa biết )
Đầu tiên là đọc cookie:
vì dụ các phiên bản cũ của IE cho phép chạy activeX FileSystemObject là một trong các activeX cho phép truy cập file, còn tiếp theo cậu hiểu ý tớ rồi chứ.
Và đọc input hidden field:
document.all.field.value;
Còn các lỗ hổng khác thì ..... nhìu nhìu.
dùng một vài bug của của IE thì mình có biết, nhưng ko muốn bàn ở đây (vì cái này ko mang tính tổng quát, phải phụ thuộc vào trình duyệt của victim)
còn chuyện
Và đọc input hidden field:
document.all.field.value;
cái này thì chỉ có victim đọc đc, cái quan trọng là nohat làm cách nào để lấy giá trị của hidden field của victim về ( lợi dụng CSRF) ?? |
|
| Cánh chym không mỏi |
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
12/02/2007 15:28:58 (+0700) | #10 | 41297 |
114v
Member
|
0 |
|
|
Joined: 08/07/2006 23:27:00
Bài gởi: 191
Offline
|
|
Theo em thì nên tạo 1 session gọi là keyspecial với nội dung là username của mod + với 1 key(có thể là key nhất định, hoặc ngẫu nhiên từ trong bảng user, để chắc hơn mình chơi cộng thêm cái pass đã mã hóa luôn)
Khi muốn làm những việc của mod, chỉ việc check xem nó có trùng không và tạo 1 trang xác nhận rồi check referer từ trang đó nữa. Không biết cách của em vậy đã ổn chưa? Theo em thì chưa ổn, sửa cái này đúng là khó thật, lơ mơ thì toi như chơi. Kiểu này thì chỉ có mod xóa luận lý rồi admin vào CP xóa thật sau :wink: |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
13/02/2007 01:11:41 (+0700) | #11 | 41347 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/4dd20f1e87dfb889bc97230e2c87c6a5.png)
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Bài gởi: 1071
Đến từ: /dev/null
Offline
|
|
hic gamma95 à, CSRF là lợi dụng truy vấn GET và Session của Moderator để truyền lệnh phá dữ liệu ( mượn tay giết gà đó mà ), chứ nó có phải là XSS đâu mà lấy cắp cái session về cất tủ . Việc lấy cái Session thật ra là theo ý của anh conmale là bypass cái vụ check session mà chúng ta đã đề cập từ đầu bài thảo luận.
Tôi đề cập tới hidden field ở đây là nó có thể chứa chuỗi hash nên tôi tìm cách lấy nó theo câu hỏi "khó" của anh conmale mừ )
|
|
Just clear, "What I need to do and how to do it"
Box tán gẫu dời về: http://www.facebook.com/hvaonline |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
13/02/2007 04:06:37 (+0700) | #12 | 41371 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/7f11b15655b2342b01a2db7edb7961cd.jpeg)
|
gamma95
Researcher
|
Joined: 20/05/2003 07:15:41
Bài gởi: 1297
Đến từ: ░░▒▒▓▓██
Offline
|
|
hic gamma95 à, CSRF là lợi dụng truy vấn GET và Session của Moderator để truyền lệnh phá dữ liệu ( mượn tay giết gà đó mà ), chứ nó có phải là XSS đâu mà lấy cắp cái session về cất tủ . Việc lấy cái Session thật ra là theo ý của anh conmale là bypass cái vụ check session mà chúng ta đã đề cập từ đầu bài thảo luận.
Tôi đề cập tới hidden field ở đây là nó có thể chứa chuỗi hash nên tôi tìm cách lấy nó theo câu hỏi "khó" của anh conmale mừ
Thì tui hỏi bạn là lấy là lấy như thế nào mà ?? đâu cần bạn định nghĩa lại CSRF là cái gì đâu ?? :wink:
ps: bạn demo 1 VD theo cách của bạn đi..và đọc kĩ lại câu hỏi |
|
| Cánh chym không mỏi |
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
28/02/2007 04:15:24 (+0700) | #13 | 43505 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/170c944978496731ba71f34c25826a34.jpg)
|
vtv_4
Elite Member
|
0 |
|
|
Joined: 12/04/2002 19:31:12
Bài gởi: 18
Offline
|
|
Vấn đề khắc phục thì cứ phải là confirm bằng server scripts thôi anh nhỉ.
Nghĩ sâu hơn thì lỗi này vô cùng nguy hiểm, vì không chỉ xóa bài mà hacker có thể tự nâng quyền và làm nhiều trò khác nữa  |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/03/2007 13:45:28 (+0700) | #14 | 44473 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/6896521bf2c62949dbdfa65176cc45f9.jpg)
|
thangdiablo
HVA Friend
|
Joined: 11/05/2003 17:31:58
Bài gởi: 729
Offline
|
|
Tự nhiên hôm nay đọc được vụ này trên Vnexpress
http://vnexpress.net/Vietnam/Vi-tinh/Hacker-Virus/2007/03/3B9F3B21/ |
|
| Kẻ thù lớn nhất của đời người là chính mình. |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/03/2007 14:13:07 (+0700) | #15 | 44483 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/4dd20f1e87dfb889bc97230e2c87c6a5.png)
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Bài gởi: 1071
Đến từ: /dev/null
Offline
|
|
Code:
http://blog.360.yahoo.com/blog-d9EBpU45eqUjn8tRROYi4xpbcA--?d=NURg2a1gKg--
Tớ thử rồi thangdiablo à, chơi đc là cả vấn đề
Mỗi bài post nó ko nhận diện bằng số id mà nó dùng một cái hash
Code:
và mỗi blog cũng có một hash riêng để nhận diện nó duy nhất
Code:
blog-d9EBpU45eqUjn8tRROYi4xpbcA--
cái hash thứ 2 lấy đc dễ dàng do nó là link sẽ hiện ra khi mọi người xem blog
Còn cái thứ 1 ko tìm ra được dễ đâu à nha ( ít ra tới thời điểm này )
Đối với người ko có chủ quyền với trang blog (chủ nhân blog) thì ko dễ gì lấy đc cái link delete như tui lấy ( tui lôi trong blog thử nghiệm của tui ).
Vậy nên có thể kết luận là người báo vul này có vẻ hơi vội vã vì nó thật sự khó khai thác ( theo ý kiến riêng của tui ).
Nên chưa cần lo là bị del hết bài trên blog ) phẻ. |
|
Just clear, "What I need to do and how to do it"
Box tán gẫu dời về: http://www.facebook.com/hvaonline |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/03/2007 17:52:55 (+0700) | #16 | 44491 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/170c944978496731ba71f34c25826a34.jpg)
|
vtv_4
Elite Member
|
0 |
|
|
Joined: 12/04/2002 19:31:12
Bài gởi: 18
Offline
|
|
Tôi đã kiểm tra rất kỹ trước khi công bố vul này.
Thứ nhất,
Y360 bị lỗi CSRF dẫn đến việc có thể xóa comment bằng đường dẫn sau:
http://blog.360.yahoo.com/blog-thAecTcofrMD7CKmJsgcIoMq?p=9&dc=10
Đoạn bôi đỏ thay đổi khác nhau với từng blog, nhưng có thể dễ dàng lấy được bằng cách nhấn chuột vào một entry bất kỳ. Đồng thời khi đó cũng lấy được tham số p=... (ID của entry)
Tham số dc=... (ID của comment) có thể lấy được dựa trên cách... suy đoán gần đúng như sau: ID của comment sẽ bằng số thứ tự của comment trong entry + ID của entry.
Tức là, giả sử bạn có một entry ID = 10 thì comment đầu tiên (bóc tem) entry đó sẽ là 11, comment tiếp theo là 12.... ect
Tuy nhiên, con số ở đây chỉ là gần đúng bởi vì, nếu có người comment lệch entry (đang có người comment entry mới nhất lại có người comment vào entry cũ hơn) thì số thứ tự của các comment tiếp theo sẽ bị lệch đi.
Thứ hai,
Y360 không chỉ bị lỗi trong phần xóa comment mà còn bị cả ở trong phần xóa comment thông qua giao diện recent comment (trang này được liệt kê khi bạn bấm vào My Blog và bấm vào Blog Comments) như sau:
http://blog.360.yahoo.com/blog/recent_comments.html?d=10
Và ở link này thì việc xóa trở nên dễ dàng hơn rất nhiều.
Mặt khác, qua phân tích ở phần trên, chúng ta cũng dễ dàng thấy rằng Y360 coi entry và comment đều là các bài post (tăng ID) nên đường link xóa recent comment ở trên có thể xóa cả entry lẫn comment. Tức là bạn chỉ cần biết được ID của entry hoặc comment mới nhất, sau đó chạy vòng lặp downto về 0 là... xóa toàn blog.
Trước khi phát hiện ra lỗi ở Recent Comment tôi có thử xem link xóa entry thì đúng như bạn phân tích, nó đã có chuỗi hash để anti CSRF. Tương tự, link xóa quick comment ngoài top page cũng có chuỗi hash này. Nhưng Recent Comment thì KHÔNG!
Có lẽ khi phóng viên "hỏi lại" bên BKIS để confirm thì bên BKIS chỉ nghĩ tới việc attack qua link delete entry nên đã phát biểu khúc cuối sai lệch hoàn toàn vấn đề (BKIS đã nói: Tuy nhiên lỗi này không nguy hiểm vì phải chuẩn bị mỗi blog một link khác nhau etc...)
Câu nói đó đúng khi xem xét ở phần thứ nhất, nhưng nếu sử dụng cách thứ 2 thì chỉ cần 1 link "dùng chung" cho tất cả các blog của những blogger khác nhau.
P/S: Thực ra, Y360 cũng đã có một bước anti CSRF ở link xóa comment và recent comment bằng việc check IP khi login và IP khi ra lệnh xóa. Có lẽ vì lý do đó nên khi tôi gửi msg thông báo lỗi cho Y360 Team chẳng thấy họ phản ứng gì. Có điều, cách anti như vậy không có tác dụng tốt lắm với blogger Việt Nam, vì IP là giống nhau do đi qua proxy. Điều đó cũng có nghĩa là nếu bạn sử dụng ADSL của FPT thì không thể attack được vào blog của người đang xài ADSL VDC hay Viettel. |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
04/03/2007 23:25:25 (+0700) | #17 | 44497 |
ndahuy
Member
|
0 |
|
|
Joined: 12/01/2006 12:08:28
Bài gởi: 7
Đến từ: TAP .Corp
Offline
|
|
Cái này có thể gọi là a.e đang brainstorming.
Một vài thứ chưa hiểu rõ lắm nên phải tìm hiểu kĩ rồi hỏi sau
Đùng 1 cái mà hỏi thì bác "châm" chẳng bao giờ trả lời ... :0 |
|
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 00:50:37 (+0700) | #18 | 44507 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/4dd20f1e87dfb889bc97230e2c87c6a5.png)
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Bài gởi: 1071
Đến từ: /dev/null
Offline
|
|
vtv_4 wrote:
Tôi đã kiểm tra rất kỹ trước khi công bố vul này.
Thứ nhất,
Y360 bị lỗi CSRF dẫn đến việc có thể xóa comment bằng đường dẫn sau:
http://blog.360.yahoo.com/blog-thAecTcofrMD7CKmJsgcIoMq?p=9&dc=10
Đoạn bôi đỏ thay đổi khác nhau với từng blog, nhưng có thể dễ dàng lấy được bằng cách nhấn chuột vào một entry bất kỳ. Đồng thời khi đó cũng lấy được tham số p=... (ID của entry)
Tham số dc=... (ID của comment) có thể lấy được dựa trên cách... suy đoán gần đúng như sau: ID của comment sẽ bằng số thứ tự của comment trong entry + ID của entry.
Tức là, giả sử bạn có một entry ID = 10 thì comment đầu tiên (bóc tem) entry đó sẽ là 11, comment tiếp theo là 12.... ect
Tuy nhiên, con số ở đây chỉ là gần đúng bởi vì, nếu có người comment lệch entry (đang có người comment entry mới nhất lại có người comment vào entry cũ hơn) thì số thứ tự của các comment tiếp theo sẽ bị lệch đi.
Thứ hai,
Y360 không chỉ bị lỗi trong phần xóa comment mà còn bị cả ở trong phần xóa comment thông qua giao diện recent comment (trang này được liệt kê khi bạn bấm vào My Blog và bấm vào Blog Comments) như sau:
http://blog.360.yahoo.com/blog/recent_comments.html?d=10
Và ở link này thì việc xóa trở nên dễ dàng hơn rất nhiều.
Mặt khác, qua phân tích ở phần trên, chúng ta cũng dễ dàng thấy rằng Y360 coi entry và comment đều là các bài post (tăng ID) nên đường link xóa recent comment ở trên có thể xóa cả entry lẫn comment. Tức là bạn chỉ cần biết được ID của entry hoặc comment mới nhất, sau đó chạy vòng lặp downto về 0 là... xóa toàn blog.
Trước khi phát hiện ra lỗi ở Recent Comment tôi có thử xem link xóa entry thì đúng như bạn phân tích, nó đã có chuỗi hash để anti CSRF. Tương tự, link xóa quick comment ngoài top page cũng có chuỗi hash này. Nhưng Recent Comment thì KHÔNG!
Có lẽ khi phóng viên "hỏi lại" bên BKIS để confirm thì bên BKIS chỉ nghĩ tới việc attack qua link delete entry nên đã phát biểu khúc cuối sai lệch hoàn toàn vấn đề (BKIS đã nói: Tuy nhiên lỗi này không nguy hiểm vì phải chuẩn bị mỗi blog một link khác nhau etc...)
Câu nói đó đúng khi xem xét ở phần thứ nhất, nhưng nếu sử dụng cách thứ 2 thì chỉ cần 1 link "dùng chung" cho tất cả các blog của những blogger khác nhau.
P/S: Thực ra, Y360 cũng đã có một bước anti CSRF ở link xóa comment và recent comment bằng việc check IP khi login và IP khi ra lệnh xóa. Có lẽ vì lý do đó nên khi tôi gửi msg thông báo lỗi cho Y360 Team chẳng thấy họ phản ứng gì. Có điều, cách anti như vậy không có tác dụng tốt lắm với blogger Việt Nam, vì IP là giống nhau do đi qua proxy. Điều đó cũng có nghĩa là nếu bạn sử dụng ADSL của FPT thì không thể attack được vào blog của người đang xài ADSL VDC hay Viettel.
Đúng như bạn phân tích, việc CSRF ở điểm yếu của yahoo 360 chỉ có thể thực hiện với việc delete comment mà thôi ( phần phân tích của tôi xoáy vào Entry ) vì comment được thể hiện bằng id ( rất dễ suy luận hoặc lấy theo cách của bạn phân tích ), trong khi đó phần quan trọng nhất của nội dung Blog là Entry của chủ nhân blog thì khó có thể bị khai thác do yahoo đã dùng phương pháp "hash" ( giống như cách chúng ta đã bàn luận ở đầu topic ).
Đây là link sẽ chạy lệnh Delete
http://blog.360.yahoo.com/blog/delete.html?msgid=maYlD49p
Tôi đã đánh dấu phần quan trọng trong link này, bạn thấy đó đoạn màu cam chính là id của entry ( một chuỗi hash )
Vậy nên việc kết luận là vul này nghiệm trọng là hơi quá lời, theo tôi nó không quá nguy hiểm vì các comment cũng chỉ là các đoạn hội thoại nhỏ cho ý kiến về Entry của chủ nhân Blog.
Còn bạn muốn tránh việc bị khai thác này thì cũng khá dễ chỉ cần bạn cẩn thận logout sau khi đã post Entry của mình thì kẻ tấn công không còn phương cách nào thực thi link CSRF nữa và blog của bạn được an toàn ( chú ý: Tuyệt đối không nên vừa Post Entry vừa truy cập lung tung )
Tái bút: vì dùng blog chưa lâu (chỉ mó máy quậy chơi) nên tôi e rằng các nhận định của tôi cũng chỉ là cảm quan cá nhân nên có gì không đúng mong bạn bỏ quá cho. |
|
Just clear, "What I need to do and how to do it"
Box tán gẫu dời về: http://www.facebook.com/hvaonline |
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 01:23:45 (+0700) | #19 | 44514 |
stupidmistakez
Member
|
0 |
|
|
Joined: 10/08/2006 18:09:15
Bài gởi: 11
Offline
|
|
hihi, newbie, mình biết 1 tí về web development nên góp ý tí xíu về mấy vấn đề ngoài lề
2. Đối với kiểu tạo request từ các thành phần ngay trong diễn đàn, mà cụ thể là lợi dùng việc chèn ảnh thì có thể thắt chặt việc parse thẻ [img], chỉ cho phép URL thẳng đến các file jpg hay gif thôi
--> cái này thì cũng có thể dễ dàng rewrite url lại, giống như HVA rewrite đuôi thành .hva lại í, mình dùng cái link có đuôi là gif của mình nhưng cái link đó để chạy scrip vẫn được mà . Với lại thắt chặt vậy có vẻ không thực sự hay, phải làm cho người dùng sử dụng thoải mái thì càng tốt, thử hỏi vào một trang giới hạn lung tung, và một trang kô giới hạn gì nhiều thì user thích cái nào hơn (đứng trên phương diện development
Dẫu biết là attaker vẫn có thể trick user send request POST nhưng em nghĩ bước đầu tiên cần phải làm vẫn là hạn chế tối đa các request GET(không sử dụng càng tốt)
-> mình thấy google hay yahoo ... nói chung mấy trang lớn lớn, người ta lại chuộng dùng GET, chắc tại vì vậy thì sẽ tiện cho người dùng hơn rất nhiều và cái này có phải là cực kỳ quan trọng kô? . Cho dù làm gì đi nữa, làm sao người sử dụng sử dụng càng dể dàng và đơn giản càng tốt, mình nghĩ vậy  |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 01:24:29 (+0700) | #20 | 44515 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/170c944978496731ba71f34c25826a34.jpg)
|
vtv_4
Elite Member
|
0 |
|
|
Joined: 12/04/2002 19:31:12
Bài gởi: 18
Offline
|
|
| Có vẻ như hackernohat chưa đọc kỹ bài của tôi. Tôi không delete blog bằng link của bạn mà delete bằng link http://blog.360.yahoo.com/blog/recent_comments.html?d=... |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 06:37:26 (+0700) | #21 | 44570 |
mabubeo90
Member
|
0 |
|
|
Joined: 02/08/2006 10:46:49
Bài gởi: 11
Offline
|
|
Trong IPB thì để del 1 bài post thì ta dùng link sau :
Code:
http://site.com/forum/index.php?act=Mod&CODE=04&f=a&t=b&p=c&st=0&auth_key=1_day_so
Trong đó a = forumid
b = topicid
c = postid
Nhũng cái này có thể dễ dàng tìm thấy , tuy nhiên làm sao để biết đc auth_key của admin hoặc mod |
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 14:39:38 (+0700) | #22 | 44713 |
stupidmistakez
Member
|
0 |
|
|
Joined: 10/08/2006 18:09:15
Bài gởi: 11
Offline
|
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 15:32:54 (+0700) | #23 | 44725 |
mrro
Administrator
|
Joined: 27/12/2001 05:07:00
Bài gởi: 683
Online
|
|
Phát hiện của vtv_4 thật có ích. Tôi nghĩ nó sẽ làm cho các web-developer ở VN chú ý hơn đến lỗi này.
-m |
|
| http://vnhacker.blogspot.com |
|
 |
 |
| [Hỏi đáp] Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 22:04:24 (+0700) | #24 | 44749 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/089f41810321eefc3f4eef5d4a388e42.png)
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Bài gởi: 9022
Đến từ: down under
Online
|
|
mabubeo90 wrote:
Trong IPB thì để del 1 bài post thì ta dùng link sau :
Code:
http://site.com/forum/index.php?act=Mod&CODE=04&f=a&t=b&p=c&st=0&auth_key=1_day_so
Trong đó a = forumid
b = topicid
c = postid
Nhũng cái này có thể dễ dàng tìm thấy , tuy nhiên làm sao để biết đc auth_key của admin hoặc mod
Việc dùng GET và pass những giá trị "nhạy cảm" như auth_key vào URI là việc cực kỳ nguy hiểm và nên tránh bằng mọi giá. auth_key chỉ nên được tạo ra một lần khi xác thực tài khoản và lưu trên memory của trình duyệt (và gắn liền + có giá trị với sessionid nào đó). Việc đưa những thông tin nhạy cảm này vào cookie và lưu trên máy của client cũng là việc nên tránh xa.
Nếu dùng POST, các giá trị nhạy cảm được đưa vào hidden field của FORM và việc này cũng nên tránh bởi vì nếu bị xss, các giá trị của hidden field vẫn có thể bị đọc được. Bởi thế, những thông tin thuộc về chủ quyền của user (như mods, admins.... ) không nên đưa vào GET hoặc POST mỗi lần một request xảy mà gắn liền chúng với một sesion có giá trị và điều tối quan trọng là sessionid phải do web application server cung cấp và xác thực. Web application không bao giờ tiếp nhận một sessionid đã cũ (và được chèn vào bất cứ lúc nào trong request). |
|
| What bringing us together is stronger than what pulling us apart. |
|
 |
 |
| [Hỏi đáp] Re:Thảo luận: cross site request forgery (CSRF hay XSRF) |
05/03/2007 23:56:28 (+0700) | #25 | 44772 |
peo
Member
|
0 |
|
|
Joined: 05/03/2007 10:22:58
Bài gởi: 1
Offline
|
|
conmale wrote:
nora wrote:
Theo mình nghĩ ban quản trị dường như đã fix lỗi này, vì như vậy conmale mới công bố lên đây.
vậy câu hỏi:
Cách của ban quản trị là gì?
Cách của BQT có 2 phần:
- phase 1: ứng dụng random token. Token này dựa trên giá trị valid session ID của thành viên có chủ quyền là moderator + một số thông tin cá biệt khác. Ví dụ, IP của session, user-agent của session và vị trí (đang ở trên diễn đàn).... Phase 1 đã ứng dụng.
Cho em hỏi,
1)cái token này sẽ nằm trong đoạn URL để delete post (nói chung là mọi URL nhạy cảm), đúng ko? Vậy nếu như attacker dùng XSS để đọc cái token này, rồi dùng token để construct cái URL cho XSRF thì vẫn có khả năng thành công đúng ko? Vấn đề là HVA ko bị XSS nên tạm thời chưa sao?
2)Có phải vì token này không thể thay thế cho sessionid nên có thể đặt nó vào URL mà không sợ vi phạm cái nguyên tắc bảo mật đã nói ở trên?
|
|
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
06/03/2007 00:08:48 (+0700) | #26 | 44775 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/7f11b15655b2342b01a2db7edb7961cd.jpeg)
|
gamma95
Researcher
|
Joined: 20/05/2003 07:15:41
Bài gởi: 1297
Đến từ: ░░▒▒▓▓██
Offline
|
|
@vtv4
P/S: Thực ra, Y360 cũng đã có một bước anti CSRF ở link xóa comment và recent comment bằng việc check IP khi login và IP khi ra lệnh xóa. Có lẽ vì lý do đó nên khi tôi gửi msg thông báo lỗi cho Y360 Team chẳng thấy họ phản ứng gì. Có điều, cách anti như vậy không có tác dụng tốt lắm với blogger Việt Nam, vì IP là giống nhau do đi qua proxy. Điều đó cũng có nghĩa là nếu bạn sử dụng ADSL của FPT thì không thể attack được vào blog của người đang xài ADSL VDC hay Viettel.
ko hiểu khúc này ?? đã lợi dụng CSRF để chém mướn thì IP trước sau hoàn toàn là IP của victim chứ nhỉ ?? nên IP trước sau gì cũng đâu có thay đổi đâu ?? |
|
| Cánh chym không mỏi |
|
 |
 |
| [Hỏi đáp] Re:Thảo luận: cross site request forgery (CSRF hay XSRF) |
06/03/2007 00:11:37 (+0700) | #27 | 44776 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/089f41810321eefc3f4eef5d4a388e42.png)
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Bài gởi: 9022
Đến từ: down under
Online
|
|
peo wrote:
conmale wrote:
nora wrote:
Theo mình nghĩ ban quản trị dường như đã fix lỗi này, vì như vậy conmale mới công bố lên đây.
vậy câu hỏi:
Cách của ban quản trị là gì?
Cách của BQT có 2 phần:
- phase 1: ứng dụng random token. Token này dựa trên giá trị valid session ID của thành viên có chủ quyền là moderator + một số thông tin cá biệt khác. Ví dụ, IP của session, user-agent của session và vị trí (đang ở trên diễn đàn).... Phase 1 đã ứng dụng.
Cho em hỏi,
1)cái token này sẽ nằm trong đoạn URL để delete post (nói chung là mọi URL nhạy cảm), đúng ko? Vậy nếu như attacker dùng XSS để đọc cái token này, rồi dùng token để construct cái URL cho XSRF thì vẫn có khả năng thành công đúng ko? Vấn đề là HVA ko bị XSS nên tạm thời chưa sao?
Cái token này là hash của những thành phần khác nhau và nó không phải là auth_key. Dùng nó "khơi khơi" không có tác dụng gì hết vì token này phải được so sánh với giá trị ngay thời điểm một request được xảy ra. Token này cũng có thể thay đổi liên tục tùy theo request được ai thực hiện và thực hiện ở đâu nữa. Ví dụ, token này chỉ dùng cho /abc/def.php?t=123&user=some_admin chẳng hạn, nếu token đó bị chôm và lúc ấy some_admin không ở trong t=123 thì nó hoàn toàn vô tác dụng. Đó là chưa kể đến khía cạnh token thay đổi khi sessionid thay đổi nữa. Ví dụ token đó bị chôm và admin hiện đang trong t=123 nhưng cái token đó được tạo ra khi admin login lần trước thì nó cũng không thể dùng để làm gì cả.
peo wrote:
2)Có phải vì token này không thể thay thế cho sessionid nên có thể đặt nó vào URL mà không sợ vi phạm cái nguyên tắc bảo mật đã nói ở trên?
sessionid là sessionid, token là token. token là "sản phẩm" của nhiều yếu tố cộng lại và sessionid chỉ là 1 trong các yếu tố.
Thân mến. |
|
| What bringing us together is stronger than what pulling us apart. |
|
 |
 |
| [Hỏi đáp] Re: Thảo luận: cross site request forgery (CSRF hay XSRF) |
08/03/2007 01:02:22 (+0700) | #28 | 45204 |
![[Avatar] [Avatar]](http://redir.hvaonline.net/hvaonline/images/avatar/089f41810321eefc3f4eef5d4a388e42.png)
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Bài gởi: 9022
Đến từ: down under
Online
|
|
Có vài người "hỏi riêng" tôi cách tạo token trong trường hợp trên và ứng dụng như thế nào, sẵn topic này còn... nóng, tôi xin phép trả lời chung luôn.
Tổng quát mà nói, khi nhấn trên một đường dẫn, trình duyệt sẽ gởi request đến web server và request này có thể là GET hoặc POST tùy ứng dụng.
- với GET, các biến sẽ được đưa đến server xuyên qua "query string" (những gì nằm sau ? là query string, những gì nằm sau = là giá trị biến). Ví dụ:
/hvaonline/moderation.php?action=del&by=conmale&post=123&token=7bbde36b2fg6d521b654ef2652593ab3
- với POST, các biến sẽ được đưa đến server xuyên qua các "hidden fields" trên HTML FORM. Ví dụ:
<input type="hidden" name="action" value="del" />
<input type="hidden" name="module" value="moderation" />
<input type="hidden" name="by" value="conmale" />
<input type="hidden" name="post" value="123" />
<input type="hidden" name="token" value="7bbde36b2fg6d521b654ef2652593ab3" />
Giá trị của token ở đây là giá trị hash của một số dữ kiện nào đó tùy chọn và nó được gởi ngược từ server đến trình duyệt khi trình duyệt vào trang có chứa link để thực thi hành động del. Ví dụ, user đi vào trang moderate.php chẳng hạn, trình duyệt sẽ nhận được được chuỗi token. Chuỗi token này sẽ được dùng để xác thực quyền "del" khi nhấn nút "delete" một cái gì đó.
Khi nhấn nút "delete", token trên được gởi đến server, cơ chế kiểm soát (một class, một function.. nào đó) sẽ lấy giá trị này đồng thời thực thi một bước tạo hash cũng dựa trên một số dữ kiện nào đó như trước. Sau đó nó so sánh 2 giá trị trước và sau xem chúng có trùng nhau hay không thì mới thực thi hành động cần thực thi.
Riêng việc xây dựng như thế nào thì tùy vào tình huống, cấu trúc của web application và độ sáng tạo ) . Tuy nhiên, hash của token nên có 2 điều kiện quan trọng:
- nó dùng dữ kiện thuộc về người có thẩm quyền thực thi chức năng. Ví dụ, tên người dùng, sessionid của người dùng, IP của người dùng....
- nó phải thay đổi (dynamic) dựa trên những điều kiện liên quan đến việc thực thi chức năng. Ví dụ: người dùng ở trên mỗi URI thì có giá trị khác, người dùng bấm trên mỗi đường dẫn sẽ tạo ra một random value nào đó và random value này được đưa vào chuỗi thông tin để tạo hash...
Lý do? Giả sử ai đó chôm được cái token của một moderator và xác định được moderator này đang ở đúng vị trí nào đó trên forum, "ai đó" có thể dùng nó để tạo 1 trang web nào đó và đồng thời chat + dụ moderator này xem. Lúc moderator này đồng ý vào trang web "độc địa" ấy thì random value đã thay đổi và bởi thế cái token bị chôm và bị dùng kia cũng không còn giá trị nữa --> thực thi việc "mượn tay chém" không được nữa ).
Tất nhiên là token / hash / so sánh ... đều xảy ra trên memory mà không hề đụng đến database bởi vì chúng cần thực hiện nhanh chóng và an toàn.
Thân mến. |
|
| What bringing us together is stronger than what pulling us apart. |
|
 |
 |
|