Lỗ hổng DOM XSS trong WordPress SEO by Yoast
WordPress-SEO-by-Yoast-DOM-XSS
WordPress SEO by Yoast - DOM XSS Vulderability
Một lỗ hổng DOM XSS trong plugin WordPress SEO by Yoast đã được báo cáo 2 năm trước bởi một thành viên có tên tài khoản "badconker". Tác giả của plugin nói rằng nó đã được vá nhưng nhà bảo mật Charles Neill phát hiện ra dường như lỗ hổng đã xuất hiện trở lại. Nếu bạn đang sử dụng plugin này, tôi khuyên bạn nên cập nhật ngay lên phiên bản mới nhất (2.2.1).
Lỗ hổng DOM XSS trong WordPress SEO by Yoast
WordPress-SEO-by-Yoast-DOM-XSS
Lỗ hổng DOM XSS trong plugin WordPress SEO by Yoast
URL chứa lỗ hổng
/wp-admin/post-new.php?post_title=<img src=x onerror=alert(1)>
Video khai thác lỗ hổng XSS/CSRF
Đoạn mã chứa lỗ hổng (wordpress-seo/js/wp-seo-metabox.js)
function ystClean( str ) {
if ( str === '' || typeof(str) === 'undefined' ) {
return '';
}
try {
str = str.replace( /<\/?[^>]+>/gi, '' );
str = str.replace( /\[(.+?)](.+?\[\/\\1])?/g, '' );
str = jQuery( '<div/>' ).html( str ).text();
}
catch ( e ) {
}
return str;
}
Đoạn mã chứa lỗ hổng xuất hiện tại dòng 6, khi hàm yst_clean thực hiện lấy văn bản từ tham số "str" thông qua hàm .html() của jQuery. Điều này nghĩa là các đoạn mã HTML bất kỳ sẽ được thực thi khi hàm yst_clean được gọi tới trong hàm ystSanitizeTitle().
function ystSanitizeTitle( title ) {
title = ystClean( title );
// and now the snippet preview title
title = ystBoldKeywords( title, false );
return title;
}
Trong phiên bản 2.2, có vẻ như tác giả đã sửa lỗi bằng cách di chuyển dòng gọi .html() xuống dưới các đoạn mã biểu thức chính quy để loại bỏ các thẻ HTML nguy hiểm.
function ystClean( str ) {
if ( str === '' || typeof(str) === 'undefined' ) {
return '';
}
try {
str = str.replace( /<\/?[^>]+>/gi, '' );
str = str.replace( /\[(.+?)](.+?\[\/\\1])?/g, '' );
str = jQuery( '<div/>' ).html( str ).text();
}
catch ( e ) {
}
return str;
}
Link: https://github.com/Yoast/wordpress-seo/blob/2.2.1/js/wp-seo-metabox.js#L22-24
Lỗ hổng đã được khắc phục trong phiên bản mới nhất của plugin WordPress Seo by Yoast.
WordPress-SEO-by-Yoast-DOM-XSS
WordPress SEO by Yoast - DOM XSS Vulderability
Một lỗ hổng DOM XSS trong plugin WordPress SEO by Yoast đã được báo cáo 2 năm trước bởi một thành viên có tên tài khoản "badconker". Tác giả của plugin nói rằng nó đã được vá nhưng nhà bảo mật Charles Neill phát hiện ra dường như lỗ hổng đã xuất hiện trở lại. Nếu bạn đang sử dụng plugin này, tôi khuyên bạn nên cập nhật ngay lên phiên bản mới nhất (2.2.1).
Lỗ hổng DOM XSS trong WordPress SEO by Yoast
WordPress-SEO-by-Yoast-DOM-XSS
Lỗ hổng DOM XSS trong plugin WordPress SEO by Yoast
URL chứa lỗ hổng
/wp-admin/post-new.php?post_title=<img src=x onerror=alert(1)>
Video khai thác lỗ hổng XSS/CSRF
Đoạn mã chứa lỗ hổng (wordpress-seo/js/wp-seo-metabox.js)
function ystClean( str ) {
if ( str === '' || typeof(str) === 'undefined' ) {
return '';
}
try {
str = str.replace( /<\/?[^>]+>/gi, '' );
str = str.replace( /\[(.+?)](.+?\[\/\\1])?/g, '' );
str = jQuery( '<div/>' ).html( str ).text();
}
catch ( e ) {
}
return str;
}
Đoạn mã chứa lỗ hổng xuất hiện tại dòng 6, khi hàm yst_clean thực hiện lấy văn bản từ tham số "str" thông qua hàm .html() của jQuery. Điều này nghĩa là các đoạn mã HTML bất kỳ sẽ được thực thi khi hàm yst_clean được gọi tới trong hàm ystSanitizeTitle().
function ystSanitizeTitle( title ) {
title = ystClean( title );
// and now the snippet preview title
title = ystBoldKeywords( title, false );
return title;
}
Trong phiên bản 2.2, có vẻ như tác giả đã sửa lỗi bằng cách di chuyển dòng gọi .html() xuống dưới các đoạn mã biểu thức chính quy để loại bỏ các thẻ HTML nguy hiểm.
function ystClean( str ) {
if ( str === '' || typeof(str) === 'undefined' ) {
return '';
}
try {
str = str.replace( /<\/?[^>]+>/gi, '' );
str = str.replace( /\[(.+?)](.+?\[\/\\1])?/g, '' );
str = jQuery( '<div/>' ).html( str ).text();
}
catch ( e ) {
}
return str;
}
Link: https://github.com/Yoast/wordpress-seo/blob/2.2.1/js/wp-seo-metabox.js#L22-24
Lỗ hổng đã được khắc phục trong phiên bản mới nhất của plugin WordPress Seo by Yoast.
Nhận xét
Đăng nhận xét