{"id":10441,"date":"2025-07-24T12:32:53","date_gmt":"2025-07-24T05:32:53","guid":{"rendered":"https:\/\/infosec.new88088.net\/?p=10441"},"modified":"2026-02-05T12:33:02","modified_gmt":"2026-02-05T05:33:02","slug":"lo-hong-trong-thu-vien-javascript-co-the-khien-ung-dung-bi-dieu-khien-tu-xa","status":"publish","type":"post","link":"https:\/\/infosec.new88088.net\/2025\/07\/24\/lo-hong-trong-thu-vien-javascript-co-the-khien-ung-dung-bi-dieu-khien-tu-xa\/","title":{"rendered":"L\u1ed7 h\u1ed5ng trong th\u01b0 vi\u1ec7n JavaScript c\u00f3 th\u1ec3 khi\u1ebfn \u1ee9ng d\u1ee5ng b\u1ecb \u0111i\u1ec1u khi\u1ec3n t\u1eeb xa"},"content":{"rendered":"<p><b>M\u1ed9t l\u1ed7 h\u1ed5ng v\u1eeba \u0111\u01b0\u1ee3c ph\u00e1t hi\u1ec7n trong th\u01b0 vi\u1ec7n form-data tr\u00ean npm. V\u1edbi m\u00e3 \u0111\u1ecbnh danh CVE-2025-7783, l\u1ed7 h\u1ed5ng n\u00e0y \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn h\u00e0ng tri\u1ec7u \u1ee9ng d\u1ee5ng web v\u00e0 API \u0111ang s\u1eed d\u1ee5ng JavaScript\/Node.js tr\u00ean to\u00e0n c\u1ea7u, \u0111\u1eb7c bi\u1ec7t l\u00e0 trong c\u00e1c h\u1ec7 th\u1ed1ng backend, microservices v\u00e0 serverless.<\/b><\/p>\n<div style=\"text-align: center\"><a class=\"js-lbImage\" style=\"cursor: pointer\" href=\"https:\/\/whitehat.vn\/attachments\/1753343397127-png.17364\/\" target=\"_blank\" rel=\"noopener\" data-lb-sidebar-href=\"\" data-lb-caption-extra-html=\"\" data-fancybox=\"lb-thread-18598\" data-caption=\"&lt;h4&gt;1753343397127.png&lt;\/h4&gt;&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;whitehat.vn&amp;#x2F;threads&amp;#x2F;lo-hong-trong-thu-vien-javascript-co-the-khien-ung-dung-bi-dieu-khien-tu-xa.18598&amp;#x2F;#post-44107&quot; class=&quot;js-lightboxCloser&quot;&gt;WhiteHat Team \u00b7 24&amp;#x2F;07&amp;#x2F;2025 l\u00fac 2:51 PM&lt;\/a&gt;&lt;\/p&gt;\"><img fetchpriority=\"high\" decoding=\"async\" class=\"bbImage \" title=\"1753343397127.png\" src=\"https:\/\/whitehat.vn\/data\/attachments\/17\/17699-906365c5e63eb2c059b034120907904b.jpg\" alt=\"1753343397127.png\" width=\"712\" height=\"400\" \/><\/a>\u200b<\/div>\n<p>Nguy\u00ean nh\u00e2n g\u1ed1c r\u1ec5 \u0111\u1ebfn t\u1eeb c\u00e1ch sinh chu\u1ed7i &#8220;boundary&#8221; kh\u00f4ng an to\u00e0n trong file &#8220;form_data.js&#8221;, d\u00f2ng 347:<\/p>\n<blockquote class=\"bbCodeBlock bbCodeBlock--expandable bbCodeBlock--quote js-expandWatch\">\n<div class=\"bbCodeBlock-content\">\n<div class=\"bbCodeBlock-expandContent js-expandContent \">boundary += Math.floor(Math.random() * 10).toString(16);<\/div>\n<div class=\"bbCodeBlock-expandLink js-expandLink\"><a role=\"button\">Nh\u1ea5n \u0111\u1ec3 m\u1edf r\u1ed9ng&#8230;<\/a><\/div>\n<\/div>\n<\/blockquote>\n<p>\u0110\u00e2y l\u00e0 c\u00e1ch t\u1ea1o ra chu\u1ed7i ph\u00e2n c\u00e1ch (boundary) gi\u1eefa c\u00e1c ph\u1ea7n d\u1eef li\u1ec7u trong bi\u1ec3u m\u1eabu d\u1ea1ng multipart\/form-data. V\u1ea5n \u0111\u1ec1 l\u00e0 Math.random() kh\u00f4ng \u0111\u1ee7 ng\u1eabu nhi\u00ean, n\u00f3 ch\u1ec9 l\u00e0 m\u1ed9t tr\u00ecnh t\u1ea1o s\u1ed1 gi\u1ea3 \u0111\u1ecbnh (PRNG), n\u00ean n\u1ebfu hacker quan s\u00e1t \u0111\u01b0\u1ee3c m\u1ed9t v\u00e0i gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c t\u1ea1o ra t\u1eeb Math.random(), h\u1ecd ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 d\u1ef1 \u0111o\u00e1n c\u00e1c gi\u00e1 tr\u1ecb ti\u1ebfp theo, bao g\u1ed3m c\u1ea3 boundary.<\/p>\n<h4>L\u1ed7 h\u1ed5ng ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o?\u200b<\/h4>\n<ol>\n<li data-xf-list-type=\"ol\">\u1ee8ng d\u1ee5ng d\u00f9ng form-data \u0111\u1ec3 g\u1eedi d\u1eef li\u1ec7u ng\u01b0\u1eddi d\u00f9ng d\u01b0\u1edbi d\u1ea1ng &#8220;multipart\/form-data&#8221; (v\u00ed d\u1ee5: \u1ea3nh, bi\u1ec3u m\u1eabu \u0111\u0103ng k\u00fd, t\u1ec7p \u0111\u00ednh k\u00e8m&#8230;).<\/li>\n<li data-xf-list-type=\"ol\">\u0110\u1ed3ng th\u1eddi, \u1ee9ng d\u1ee5ng v\u00f4 t\u00ecnh \u0111\u1ec3 l\u1ed9 gi\u00e1 tr\u1ecb Math.random() ra ngo\u00e0i, ch\u1eb3ng h\u1ea1n qua header nh\u01b0 &#8220;x-request-id&#8221;, &#8220;trace-id&#8221; ho\u1eb7c debug log.<\/li>\n<li data-xf-list-type=\"ol\">Hacker quan s\u00e1t nh\u1eefng gi\u00e1 tr\u1ecb \u0111\u00f3, t\u1eeb \u0111\u00f3 t\u00ednh to\u00e1n \u0111\u01b0\u1ee3c tr\u1ea1ng th\u00e1i n\u1ed9i b\u1ed9 c\u1ee7a PRNG.<\/li>\n<li data-xf-list-type=\"ol\">H\u1ecd d\u00f9ng n\u00f3 \u0111\u1ec3 d\u1ef1 \u0111o\u00e1n chu\u1ed7i boundary trong c\u00e1c l\u1ea7n g\u1eedi ti\u1ebfp theo.<\/li>\n<li data-xf-list-type=\"ol\">Sau \u0111\u00f3, t\u1ea1o ra g\u00f3i tin \u0111\u1ed9c h\u1ea1i ch\u1ee9a boundary ch\u00ednh x\u00e1c, th\u00eam v\u00e0o c\u00e1c tham s\u1ed1 gi\u1ea3 m\u1ea1o, ti\u00eam d\u1eef li\u1ec7u \u0111\u1ed9c h\u1ea1i v\u00e0o h\u1ec7 th\u1ed1ng n\u1ed9i b\u1ed9, th\u1eadm ch\u00ed truy c\u1eadp tr\u00e1i ph\u00e9p v\u00e0o c\u00e1c API backend.<\/li>\n<\/ol>\n<h4>M\u1ee9c \u0111\u1ed9 nguy hi\u1ec3m v\u00e0 ph\u1ea1m vi \u1ea3nh h\u01b0\u1edfng\u200b<\/h4>\n<ul>\n<li data-xf-list-type=\"ul\">M\u1ee9c \u0111\u1ed9 nghi\u00eam tr\u1ecdng: &#8220;Critical&#8221; theo thang \u0111i\u1ec3m CVSS v4.<\/li>\n<li data-xf-list-type=\"ul\">\u1ea2nh h\u01b0\u1edfng r\u1ed9ng kh\u1eafp: C\u00e1c phi\u00ean b\u1ea3n b\u1ecb \u1ea3nh h\u01b0\u1edfng g\u1ed3m:\n<ul>\n<li data-xf-list-type=\"ul\">D\u01b0\u1edbi 2.5.4<\/li>\n<li data-xf-list-type=\"ul\">3.0.0 \u0111\u1ebfn 3.0.3<\/li>\n<li data-xf-list-type=\"ul\">4.0.0 \u0111\u1ebfn 4.0.3<\/li>\n<\/ul>\n<\/li>\n<li data-xf-list-type=\"ul\">\u0110i\u1ec1u ki\u1ec7n khai th\u00e1c kh\u00f4ng qu\u00e1 ph\u1ee9c t\u1ea1p n\u1ebfu \u1ee9ng d\u1ee5ng \u0111\u1ec3 l\u1ed9 c\u00e1c gi\u00e1 tr\u1ecb ng\u1eabu nhi\u00ean.<\/li>\n<\/ul>\n<p>L\u1ed7i n\u00e0y t\u01b0\u01a1ng t\u1ef1 m\u1ed9t v\u1ea5n \u0111\u1ec1 g\u1ea7n \u0111\u00e2y trong th\u01b0 vi\u1ec7n Undici, cho th\u1ea5y \u0111\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 tr\u01b0\u1eddng h\u1ee3p c\u00e1 bi\u1ec7t m\u00e0 l\u00e0 xu h\u01b0\u1edbng sai s\u00f3t ph\u1ed5 bi\u1ebfn trong vi\u1ec7c d\u00f9ng Math.random() \u1edf JavaScript.<\/p>\n<h4>Gi\u1ea3i ph\u00e1p khuy\u1ebfn ngh\u1ecb cho ng\u01b0\u1eddi d\u00f9ng:\u200b<\/h4>\n<ul>\n<li data-xf-list-type=\"ul\">C\u1eadp nh\u1eadt ngay g\u00f3i form-data l\u00ean c\u00e1c b\u1ea3n \u0111\u00e3 v\u00e1:\n<ul>\n<li data-xf-list-type=\"ul\">4.0.4, 3.0.4 ho\u1eb7c 2.5.4<\/li>\n<\/ul>\n<\/li>\n<li data-xf-list-type=\"ul\">Thay th\u1ebf Math.random() b\u1eb1ng tr\u00ecnh t\u1ea1o s\u1ed1 ng\u1eabu nhi\u00ean an to\u00e0n, nh\u01b0 crypto.randomUUID() ho\u1eb7c crypto.randomBytes() trong Node.js.<\/li>\n<li data-xf-list-type=\"ul\">Ki\u1ec3m tra to\u00e0n b\u1ed9 codebase \u0111\u1ec3 t\u00ecm v\u00e0 thay th\u1ebf c\u00e1c \u0111o\u1ea1n code s\u1eed d\u1ee5ng Math.random() trong c\u00e1c ch\u1ee9c n\u0103ng b\u1ea3o m\u1eadt (nh\u01b0 token, ID, x\u00e1c th\u1ef1c\u2026).<\/li>\n<li data-xf-list-type=\"ul\">Tr\u00e1nh \u0111\u1ec3 l\u1ed9 th\u00f4ng tin n\u1ed9i b\u1ed9 (nh\u01b0 header ch\u1ee9a trace id) ra ngo\u00e0i, n\u1ebfu c\u00f3 d\u00f9ng PRNG.<\/li>\n<\/ul>\n<p>L\u1ed7i CVE-2025-7783 m\u1ed9t l\u1ea7n n\u1eefa gi\u00f3ng l\u00ean h\u1ed3i chu\u00f4ng c\u1ea3nh t\u1ec9nh cho c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n. Khi c\u00e1c h\u1ec7 th\u1ed1ng c\u00e0ng k\u1ebft n\u1ed1i ch\u1eb7t ch\u1ebd v\u00e0 ph\u1ee9c t\u1ea1p h\u01a1n, nh\u1eefng l\u1ed7 h\u1ed5ng nh\u1ecf nh\u01b0 ch\u1ec9 m\u1ed9t d\u00f2ng d\u00f9ng Math.random(), c\u0169ng c\u00f3 th\u1ec3 tr\u1edf th\u00e0nh &#8220;c\u1eeda h\u1eadu&#8221; cho hacker x\u00e2m nh\u1eadp. \u0110\u1eebng \u0111\u1ec3 nh\u1eefng chi ti\u1ebft nh\u1ecf \u0111\u00e1nh \u0111\u1ed5i c\u1ea3 m\u1ed9t h\u1ec7 th\u1ed1ng, b\u1ea3o m\u1eadt l\u00e0 vi\u1ec7c kh\u00f4ng bao gi\u1edd \u0111\u01b0\u1ee3c l\u00e0m qua loa.<\/p>\n<div style=\"text-align: right\"><b><i>Theo Cyber Press<\/i><\/b>\u200b<\/div>\n<div style=\"text-align: right;margin-top: 16px\"><i>Theo: <a href=\"https:\/\/whitehat.vn\/threads\/lo-hong-trong-thu-vien-javascript-co-the-khien-ung-dung-bi-dieu-khien-tu-xa.18598\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/whitehat.vn\/threads\/lo-hong-trong-thu-vien-javascript-co-the-khien-ung-dung-bi-dieu-khien-tu-xa.18598\/<\/a><\/i><\/div>\n","protected":false},"excerpt":{"rendered":"<p>M\u1ed9t l\u1ed7 h\u1ed5ng v\u1eeba \u0111\u01b0\u1ee3c ph\u00e1t hi\u1ec7n trong th\u01b0 vi\u1ec7n form-data tr\u00ean npm. V\u1edbi m\u00e3 \u0111\u1ecbnh danh CVE-2025-7783, l\u1ed7 h\u1ed5ng n\u00e0y \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn h\u00e0ng tri\u1ec7u \u1ee9ng d\u1ee5ng web v\u00e0 API \u0111ang s\u1eed d\u1ee5ng JavaScript\/Node.js tr\u00ean to\u00e0n c\u1ea7u, \u0111\u1eb7c bi\u1ec7t l\u00e0 trong c\u00e1c h\u1ec7 th\u1ed1ng backend, microservices v\u00e0 serverless. \u200b Nguy\u00ean nh\u00e2n g\u1ed1c r\u1ec5 \u0111\u1ebfn [&hellip;]<\/p>\n","protected":false},"author":46,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[],"class_list":["post-10441","post","type-post","status-publish","format-standard","hentry","category-tin-tuc-cua-vien"],"_links":{"self":[{"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/posts\/10441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/users\/46"}],"replies":[{"embeddable":true,"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/comments?post=10441"}],"version-history":[{"count":0,"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/posts\/10441\/revisions"}],"wp:attachment":[{"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/media?parent=10441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/categories?post=10441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infosec.new88088.net\/wp-json\/wp\/v2\/tags?post=10441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}