J2TEAM Security: A must-have extension for Chrome users. Install now!

Lỗ hổng DOM XSS trong WordPress SEO by Yoast

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".
WordPress SEO by Yoast - DOM XSS Vulderability
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

Lỗ hổng DOM XSS trong plugin WordPress SEO by Yoast
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.
Leader at J2TEAM. Website: https://j2team.dev/

2 nhận xét

  1. hello!

    great video and information.
  2. Hello!

    Great Video and Information. I am seeing this hack happening a lot now on the Internet. Do you have an email address, so I can contact you?
Cảm ơn bạn đã đọc bài viết!

- Bạn có gợi ý hoặc bình luận xin chia sẻ bên dưới.

- Hãy viết tiếng Việt có dấu nếu có thể!