Strictly social XSS в WordPress
23:53 01.11.2011Ще 15.10.2008 я знайшов Cross-Site Scripting уразливість в WordPress. І після публікації статті про Виключно соціальний XSS, до якої має відношення ця дірка, я публікую дану інформацію.
В WordPress має місце Cross-Site Scripting уразливість, в даному випадку Strictly social XSS. Причому одразу двох типів цього класу XSS: Strictly social XSS persistent (лінка з JavaScript/VBScript) та Strictly social XSS persistent self-contained (лінка з data з JavaScript). Тобто при бажанні цю дірку можна розбити на дві дірки. Це хороший приклад цих двох різновидів Strictly social XSS уразливостей.
XSS:
В полі коментарю (параметр comment):
<a href="javascript:alert(document.cookie)">test</a>
<a href="vbscript:MsgBox(document.cookie)">test</a>
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+">test</a>
Атака спрацює лише, якщо коментар опублікував адмін, а не незалогінений відвідувач. Для чого можна використати CSRF уразливість в WordPress <= 2.1.2. В описі даної уразливості ciri розповів про persistent XSS (що працювала разом з CSRF), а я веду мову про Strictly social XSS. В нових версіях WP, де присутній захист від CSRF, можна використати reflected XSS дірку (або ж використати інші техніки розроблені мною) для обходу цього захисту та публікації коментаря з атакуючим кодом.
В WordPress 2.0.10 та 2.1.3 розробники вже виправили CSRF, але можливість проведення Strictly social XSS (через anchor тег) все ще залишилася навіть в останній версії WP. Розробники не стали прибирати цей функціонал адміна, для повного виправлення XSS, обмежившись виправленням CSRF. Тому як вищезгадана persistent XSS, так і знайдена мною Strictly social XSS, все ще працюють.
Відмінність WP 3.x від попередніх версій в тому, що в адмінці (на сторінці edit-comments.php) код з коментарю прибирається (чого не робилося в старих версіях) і атака лише можлива на самій сторінці з коментарем. Для автоматизації запуску коду (після того як він буде розміщений) через Strictly social XSS уразливість можна скористатися технікою ClickJacking, причому атакувати можна не тільки адміна, але й будь-яких користувачів та відвідувачів сайта.
Уразливі всі версії WordPress - WP 3.2.1 та попередні версії. Тестував в різних 2.0.x версіях, включно з 2.0.11, та в 3.1.1.