
SafeDep-მა npm-ის პაკეტ mathmain-ში დაშიფრული კოდის ჩამტვირთავი იპოვა
კიბერუსაფრთხოების კომპანია SafeDep-ის მკვლევარებმა npm-ის პაკეტ mathmain-ში დაშიფრული კოდის ჩამტვირთავი აღმოაჩინეს. ის პაროლს ამომხსნელისთვის გადაცემული მონაცემებიდან იღებს და ფაილის ჩაწერა-გაშვება შეუძლია.
კიბერუსაფრთხოების კომპანია SafeDep-ის მკვლევარებმა დაშიფრული კოდის ჩამტვირთავი აღმოაჩინეს npm-ის პაკეტ mathmain-ში, რომელიც თავს მათემატიკურ ბიბლიოთეკად წარმოაჩენს. ჩამტვირთავი პაროლს ბიბლიოთეკის მატრიცის ამომხსნელისთვის გადაცემული მონაცემებიდან იღებს: სწორი მონაცემებით მას ფაილის გაშიფვრა და მისი კოდის გაშვება შეუძლია. ანალიზი 17 სექტემბერს გამოქვეყნდა; თავად დაშიფრული კოდის გაშიფვრა ვერ მოხერხდა.
ფარული გამოძახება ამომხსნელში
კვლევა იმ დაკვირვებით დაიწყო, რომ mathmain ფართოდ გამოყენებული mathjs ბიბლიოთეკის გადარქმეულ და ობფუსკირებულ ასლს ჰგავდა. მინიშნება CommonJS-ის ვერსიაში lusolve()-ის ბოლოს დამატებული ზედმეტი გამოძახება იყო: შედეგის გამოთვლის შემდეგ ამომხსნელი ქვედა სამკუთხა მატრიცის მონაცემებს removeSolveValidation()-ს გადასცემს და დაბრუნებულ მნიშვნელობას აღარ იყენებს.
ეს გამოძახება lib/cjs/utils/is.js ფაილში isGraph()-თან მიდის. isGraph() საკუთარ არგუმენტს JSON-სტრიქონად აქცევს და პაროლად იყენებს, base64-ის ბლოკიდან ფაილის სახელს შიფრავს და მიღებულ გზას პაროლთან ერთად event() დამხმარე ფუნქციას გადასცემს, რომლის შედეგიც Node-ის require()-ს გადაეცემა.
scrypt, AES-GCM და ჩაწერა დისკზე
რუტინები lib/cjs/utils/event.js-შია: ისინი scrypt-ით 256-ბიტიან გასაღებს ამზადებენ და AES-GCM-ით შიფრავენ; თითოეულ ბლოკში 16 ბაიტი მარილი, 12 ბაიტი ინიციალიზაციის ვექტორი, 16 ბაიტი აუთენტიფიკაციის ტეგი და შიფრტექსტია — ყველაფერი base64-ად.
დამხმარე ფუნქცია გაშიფრულ ბაიტებს დისკზე წერს და აბრუნებს გზას, რომელსაც შემდეგ ტვირთავენ, ამიტომ კოდი პროცესისავე უფლებებით სრულდება. ვინაიდან ჩაწერამდე სახელს enc_ პრეფიქსი მოშორდება, ასეთი პრეფიქსის გარეშე დაშიფრული ფაილი საკუთარ თავს გადააწერს. lib/cjs/utils/-ში სამი ფაილი JavaScript-ის ნაცვლად base64 მონაცემებს შეიცავს: graph.js (20 918 ბაიტი), fraction.js (9 084) და bignumber/type.js (1 179 416).
ორი დამატებითი პაკეტი და უცნობი ტრიგერი
რეგისტრში ძებნამ კიდევ ორი პაკეტი გამოავლინა — mathsbase და math-universe, რომლებიც ხუთ ვერსიაზე იზიარებენ ჩამტვირთავის ფაილებს, ტრიგერის კოდსა და ამომხსნელის ცვლილებებს. [email protected] 2026 წლის 27 აგვისტოს გამოქვეყნდა, [email protected] კი 17 სექტემბერს; npm კვლავ ძველ [email protected]ს აძლევდა ნაგულისხმევად.
ორივე პაკეტის მიერ მითითებულ GitHub-ის რეპოზიტორიებში შემოწმებულ კომიტებში დამატებული გამოძახება არ ფიგურირებს, ამიტომ საჯარო კოდი გამოქვეყნებულ აწყობას არ ხსნის. გუნდმა დაშიფრული ფაილის სახელის წინააღმდეგ 16 922 სავარაუდო პაროლი, ხუთი ბლოკის წინააღმდეგ კი დამატებით 533 პაროლი შეამოწმა — აუთენტიფიკაცია ვერც ერთმა ვერ გაიარა. სამუშაო ჰიპოთეზაა, რომ პაკეტები მომავალი შეტევისთვის მონაცემებს ინახავს, ტრიგერს კი ცალკე პაკეტი მოგვცემს; ასეთი პაკეტი ჯერ არ მოიძებნა და მკვლევარები აღნიშნავენ, რომ კოდის მიერ მონაცემების მოპარვა, სერვერთან კავშირი ან სისტემაში წვდომის შენარჩუნება ჯერ არ დადასტურებულა.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.