ប្រសិនបើអ្នកបានតាមដានព័ត៌មានសន្តិសុខបច្ចេកវិទ្យាក្នុងសប្តាហ៍នេះ អ្នកប្រហែលជាបានឃើញភាពវឹកវរជុំវិញ “Node2Shell”។ ចំណងជើងព័ត៌មានបានធ្វើឱ្យវាមើលទៅដូចជាបញ្ហារបស់ Node.js ដែលជាចន្លោះប្រហោងកម្រិតធ្ងន់អនុញ្ញាតឱ្យមានការបញ្ជាកូដពីចម្ងាយ (Remote Code Execution – RCE) តាមរយៈដំណើរការពន្លាសម្រួលទិន្នន័យ (decompression) ដែលមានកំហុស។ ប៉ុន្តែការពិតគឺថា ប្រសិនបើអ្នកកំពុងដំណើរការសេវាកម្ម Python ដែលគ្រប់គ្រងទិន្នន័យពន្លាសម្រួល អ្នកក៏អាចស្ថិតក្នុងហានិភ័យនេះដែរ។
ចន្លោះប្រហោងនេះ ដែលត្រូវបានកត់ត្រាជា CVE-2026-111497 តាមពិតមិនមែនជាកំហុសរបស់ Node.js នោះទេ។ វាស្ថិតនៅក្នុង Brotli C decoder របស់ Google។ ដោយសារតែបណ្ណាល័យ C នេះត្រូវបានដាក់បញ្ចូលទៅក្នុង runtime និង package ជាច្រើន ផលប៉ះពាល់របស់វាគឺមានវិសាលភាពធំជាងអ្វីដែលឈ្មោះ “Node2Shell” បានបង្ហាញ។ ជាពិសេស package លើ PyPI គឺ Brotli និង brotlicffi ក៏ប្រើប្រាស់ decoder ដែលមានចន្លោះប្រហោងដូចគ្នា។
បញ្ហាបច្ចេកទេស៖ ការមិនត្រួតពិនិត្យតម្លៃត្រឡប់ (Unchecked Return)
ជាមូលដ្ឋាន នេះគឺជាករណីនៃ “ការបរាជ័យដោយស្ងប់ស្ងាត់”។ ចន្លោះប្រហោងនេះកើតចេញពី function មួយឈ្មោះថា DecodeBlockTypeAndLength()។ នៅក្នុង version ដែលមានបញ្ហា function នេះត្រឡប់តម្លៃជា boolean ដើម្បីប្រាប់ថា stream ទិន្នន័យមិនត្រឹមត្រូវ ឬត្រូវការទិន្នន័យបន្ថែម។
បញ្ហាគឺថា “fast path” នៃ decoder នេះបានរំលងតម្លៃត្រឡប់នោះចោលតែម្តង។ នៅពេលដែលអ្នកវាយប្រហារផ្ញើ stream Brotli ដែលត្រូវបានរៀបចំជាពិសេស ដើម្បីបង្ខំឱ្យមានការប្តូរ block-type ដែលមិនត្រឹមត្រូវ decoder វាមិនបានឈប់ដំណើរការទេ។ ផ្ទុយទៅវិញ វាបន្តដំណើរការជាមួយនឹងស្ថានភាពផ្ទៃក្នុងដែលខូច ដែលនាំឱ្យមានការសរសេរទិន្នន័យលើសពី buffer (out-of-bounds write)។ នេះហើយជាអ្វីដែលអនុញ្ញាតឱ្យមានការលេចធ្លាយ memory, ធ្វើឱ្យកម្មវិធីគាំង ឬអាក្រក់បំផុតគឺអនុញ្ញាតឱ្យអ្នកវាយប្រហារបញ្ជាកូដពីចម្ងាយ (RCE)។
ហេតុអ្វីបានជាប្រព័ន្ធ Python របស់អ្នកមានហានិភ័យ?
អ្នកប្រហែលជាគិតថា “ខ្ញុំមិនបានប្រើ package ឈ្មោះ Brotli ផង”។ ប៉ុន្តែនៅក្នុងប្រព័ន្ធ Python, Brotli ជារឿយៗគឺជា dependency ដែលលាក់កំបាំង។ HTTP client ល្បីៗជាច្រើនប្រើប្រាស់វាដើម្បីពន្លាសម្រួលទិន្នន័យដោយស្វ័យប្រវត្តិ នៅពេលដែល server ផ្ញើ Accept-Encoding: br មក។
ប្រសិនបើអ្នកប្រើប្រាស់ឧបករណ៍ខាងក្រោម អ្នកអាចនឹងប្រឈមនឹងហានិភ័យ៖
- urllib3 (រួមទាំង requests)
- httpx (ជាមួយ brotli extra)
- aiohttp
- Scrapy
ប្រសិនបើសេវាកម្ម Python របស់អ្នកទាញយកទិន្នន័យពី server ដែលអ្នកមិនបានគ្រប់គ្រង ដូចជា webhooks, ការបង្កើត URL preview ឬ web crawlers អ្នកកំពុងតែបញ្ជូនទិន្នន័យដែលគ្រប់គ្រងដោយអ្នកវាយប្រហារ ទៅកាន់ decoder ដែលមានចន្លោះប្រហោង។
បញ្ហានៃ “ការកែសម្រួលដោយស្ងប់ស្ងាត់” (Silent Patch)
អ្វីដែលធ្វើឱ្យរឿងនេះកាន់តែគ្រោះថ្នាក់ គឺរបៀបដែលវាត្រូវបានដោះស្រាយ។ ទាំង Brotli និង brotlicffi ត្រូវបានធ្វើបច្ចុប្បន្នភាពលើ PyPI ដើម្បីបិទចន្លោះប្រហោងនេះ ប៉ុន្តែក្នុងកំណត់សម្គាល់នៃការចេញផ្សាយ (release notes) មិនបានបញ្ជាក់អ្វីទាំងអស់។ មិនមានការលើកឡើងអំពី CVE ឬការកែសម្រួលសន្តិសុខនោះទេ។
ដោយសារតែការខ្វះតម្លាភាពនេះ ឧបករណ៍ស្កេនស្វ័យប្រវត្តិជាច្រើន រួមទាំង Dependabots និងឧបករណ៍សន្តិសុខផ្សេងៗ មិនបានផ្តល់ការព្រមានអំពីចន្លោះប្រហោងនេះទេ។ Dashboard របស់អ្នកអាចនឹងបង្ហាញពណ៌បៃតង (ថាគ្មានបញ្ហា) ប៉ុន្តែប្រព័ន្ធផលិតកម្មរបស់អ្នកអាចស្ថិតក្នុងស្ថានភាពគ្រោះថ្នាក់។
របៀបដោះស្រាយឥឡូវនេះ
កុំរង់ចាំរហូតដល់ឧបករណ៍ស្កេនរកឃើញ។ អ្នកត្រូវតែត្រួតពិនិត្យ និងធ្វើបច្ចុប្បន្នភាព dependency របស់អ្នកដោយផ្ទាល់។
ដំណោះស្រាយ៖
ប្រើប្រាស់ពាក្យបញ្ជាខាងក្រោម ដើម្បីប្រាកដថាអ្នកប្រើប្រាស់ version ដែលបានកែសម្រួលរួច៖pip install -U "Brotli>=1.2.1" "brotlicffi>=1.2.1.0"
ប្រសិនបើអ្នកមិនអាចធ្វើបច្ចុប្បន្នភាពបានភ្លាមៗ៖
- លុប (Uninstall)
Brotliនិងbrotlicffiចេញ។ HTTP client ភាគច្រើននឹងប្តូរទៅប្រើgzipឬdeflateដោយស្វ័យប្រវត្តិ។ - លុប
brចេញពីAccept-Encodingheaders សម្រាប់ការស្នើសុំចេញទៅក្រៅ (outbound requests)។ - បដិសេធ (Reject)
Content-Encoding: brលើរាល់ request bodies ដែលចូលមកក្នុងប្រព័ន្ធ។