SkillLeak, ბრაუზერის სერთიფიკატების ქურდობა MCP Skill-ის საშუალებით

SkillLeak: ბრაუზერის სერთიფიკატების დეშიფრატორი, რომელიც მოწოდებულია MCP Skill-ის მეშვეობით

TL; DR

@szc-ft/mcp-szcd-client არის მოდელის კონტექსტური პროტოკოლის (MCP) კლიენტი, გამოქვეყნებული npm-ისთვის, რომელიც ავტომატურად ახდენს ხელოვნური ინტელექტის კოდირების ასისტენტების კონფიგურაციას — ისეთი წებოვანი პაკეტის ტიპი, რომელსაც დეველოპერი აყენებს, რათა IDE აგენტმა შეძლოს კომპონენტების ბიბლიოთეკის სერვისთან დაკავშირება. მას აქვს გრძელი, ჩვეულებრივად გამოსვლის ისტორია (71 ვერსიები) და კეთილთვისებიანი ინსტალაციის ეტაპი. მის ინსტალაციის შემდგომ ეტაპზე არაფერი ეხება ავტორიზაციის მონაცემებს.

სერტიფიკატის წაკითხვის ქცევა ერთი ფენით უფრო ღრმაა, შეფუთულ MCP უნარში, რომელსაც ეწოდება local-browser-testროდესაც ეს უნარი connect() რუტინა მუშაობს, ის იწვევს _decryptCredentials() — რომელიც გაშიფრავს ლოკალურ Chrome/Edge პროფილში შენახული ყველა პაროლი (ყველა საიტი, და არა ერთი აპლიკაცია, რომელზეც ბრაუზერის ტესტირება იქნებოდა მიმართული) Windows Data Protection API-ის (DPAPI) და AES-256-GCM-ის გამოყენებით. გაშიფრული ნაკრები იწერება უბრალო ტექსტით ~/.szcd-mcp/deps/decrypted-creds.json და დაბრუნდა უნარის MCP ინსტრუმენტის შედეგში, რომელიც გადადის პაკეტის ნაგულისხმევ დისტანციურ MCP სერვერზე, mcp.szcd-mcp.top.

ეს არის მიწოდების ჯაჭვის ნიმუში, რომლის დასახელებაც ღირს: მგრძნობიარე შესაძლებლობა ინსტალაციის კაუჭში არ არის (სადაც სკანერებისა და მიმომხილველების უმეტესობა ეძებს), მაგრამ MCP უნარში, რომელიც მხოლოდ მაშინ სრულდება, როდესაც ოპერატორი ინსტრუმენტს საკუთარ გაშვებულ ბრაუზერზე მიმართავს. ჩვენ მას ვუწოდებთ SkillLeak. MEW კლასიფიცირებს @szc-ft/mcp-szcd-client (ვერსიები 0.38.0 მდე 0.39.0) როგორც მავნე.

ტერმინის შენიშვნა — MCP უნარი: ინსტრუქციებისა და დამხმარე სკრიპტების დამოუკიდებელი ნაკრები, რომელსაც MCP სერვერი ხელოვნური ინტელექტის აგენტს გამოძახებად შესაძლებლობად აწვდის. აგენტი მას ინსტრუმენტის მსგავსად იძახებს; სკრიპტები დეველოპერის მანქანაზე მუშაობს.

შეტევის ანატომია

შეფუთვა ორ სრულიად განსხვავებულ სახეს წარმოადგენს.

სახე, რომელსაც მიმომხილველი პირველად ხედავს ინსტალაციის გზაა. მანიფესტი აცხადებს პოსტინსტალაცია: კვანძის სკრიპტები/პოსტინგსტალი.jsდა ეს სკრიპტი ზუსტად იმას აკეთებს, რასაც README ამბობს: ის აკავშირებს MCP ინტეგრაცია IDE-ებში და დაძმობილებული პაკეტის ინსტალაცია, @szc-ft/sketch-mcp-server. ის ვერასდროს აღწევს ავტორიზაციის კოდს. სკანერი, რომელიც ინსტალაციის დროს ჩერდება hooks — ისტორიულად ყველაზე მაღალი სიგნალის მქონე ადგილი — სუფთა, არაფრით გამორჩეული დეველოპერის ინსტრუმენტია. სინამდვილეში, ეს პაკეტი ადრეული მიმოხილვის გავლისას უსაფრთხოდ იყო შეფასებული.

სახე, რომელსაც მნიშვნელობა აქვს მიიღწევა მხოლოდ შეფუთული უნარის მეშვეობით. ჯაჭვი:

  • დეველოპერი მართავს ლოკალური ბრაუზერის ტესტი უნარი Chrome/Edge ინსტანციის წინააღმდეგ, რომელიც მათ დისტანციური გამართვის პორტით დაიწყეს. ეს არის უნარის გამოყენების დოკუმენტირებული გზა.
  • უნარი დაკავშირება () (lib/browser-engine.js) ზარები _decryptCredentials() 246-ე ხაზზე.
  • _decryptCredentials() ზარები decryptAllPasswords({ filter: '%' }). '%' ფილტრი არის დეტალი, რომელიც ტესტირების მოხერხებულობას მოსავლის აღებად აქცევს: ის ემთხვევა ყველა შენახულ წყაროს და არა ტესტირების ქვეშ მყოფ ერთეულ ადგილს.
  • lib/decrypt-passwords.js კითხულობს ბრაუზერის os_crypt დაშიფრული გასაღები, მუშაობს powershell … ProtectedData::Protect-ის გაუქმება (DPAPI) AES გასაღების აღსადგენად, შემდეგ AES-256-GCM შიფრავს თითოეულ შენახულ ავტორიზაციის მონაცემს.
  • სრული გაშიფრული ნაკრები იწერება ~/.szcd-mcp/deps/decrypted-creds.json გამჭვირვალე ტექსტში და დაბრუნებული, როგორც უნარის MCP ინსტრუმენტი შედეგი
  • ეს შედეგი MCP არხით უკან იგზავნება პაკეტის ნაგულისხმევ სერვერზე, mcp.szcd-mcp.top — იგივე ჰოსტი, რომელიც დოკუმენტირებულია README-სა და სკრიპტები/lib/common.js.

მოკლე შენიშვნა იმის შესახებ, თუ რატომ მუშაობს საერთოდ მე-4 ნაბიჯი. Windows-ზე Chrome-ი და Edge-ი შენახულ პაროლებს არ ინახავს უბრალო ტექსტში: თითოეული ავტორიზაციის მონაცემი დაშიფრულია AES-256-GCM გასაღებით და ეს გასაღები თავად დალუქულია DPAPI-ით, რომელიც მას მიმდინარე მომხმარებლის ანგარიშთან აკავშირებს. ამიტომ, პაროლის აღდგენას ორი ნაბიჯი სჭირდება - პირველი ProtectedData::დაცვის გაუქმება AES გასაღების აღსადგენად (რაც წარმატებით სრულდება, რადგან კოდი მუშაობს შესული მომხმარებლის სახელით, ზუსტად იმ კონტექსტში, რომელსაც დეველოპერის ტერმინალი გვთავაზობს), შემდეგ GCM გაშიფრავს ბრაუზერიდან წაკითხულ თითოეულ შენახულ blob-ს. os_crypt-დაცული მაღაზია. ეს კარგად არის გაგებული, ოფლაინ რეჟიმში და ჩუმად: არ საჭიროებს მთავარი პაროლის მოთხოვნას, ბრაუზერთან ურთიერთქმედებას, ქსელთან ორმხრივ კავშირს შედეგების გადაგზავნამდე. ეს იგივე პრიმიტივია, რომელსაც ბევრი სასაქონლო ინფორმაციის მოპარვის მცველი იყენებს - სიახლე აქ მხოლოდ მისი შემცველი შეფუთვაა.

დეშიფრატორი შემთხვევითი არ არისის სამჯერ არის შეფუთული — ქვეშ standard-უნარი/, ღია კოდის გაფართოება/და qwen-გაფართოება/ — ერთი ასლი მხარდაჭერილ ხელოვნური ინტელექტის ასისტენტის ზედაპირზე, ამიტომ შესაძლებლობა გადაეცემა დეველოპერის მიერ დაკავშირებულ ნებისმიერ ასისტენტს.

კონტრასტი ლეგიტიმურ ბრაუზერის ავტომატურ ტესტთანlogin ეს მთელი ამბავია. ნამდვილი ტესტის დამხმარე გაშიფრავს სერთიფიკატს ერთი აპლიკაცია, ეს არის exercising, იყენებს მას პროცესის დროს და არასდროს ინახავს ან გადასცემს მას. აქ რუტინა ყველაფერს გაშიფრავს, წერს დისკზე ნათლად და ქსელის საზღვრის გავლით აბრუნებს დისტანციურ სერვერზე.

ქრონოლოგია და ტრიგერი 

ექსპოზიციის გასაგებად ორი ქცევაა მნიშვნელოვანი.

ტრიგერი არის არჩევითი და არა ავტომატური. პაკეტის ინსტალაცია არ კითხულობს რაიმე ავტორიზაციის მონაცემებს. გაშიფვრა ხორციელდება მხოლოდ მაშინ, როდესაც დეველოპერი აქტიურად გამოიძახებს ლოკალური ბრაუზერის ტესტი დისტანციური გამართვის რეჟიმში გაშვებული ბრაუზერის წინააღმდეგ. ეს მნიშვნელოვნად ამცირებს ვისზეა გავლენა, ვიდრე პოსტინსტალაცია ტვირთი, რომელიც ყოველ npm ინსტალაცია.

შეფუთვა დაძველებულია, არ არის გადასაყრელი. გამომცემელმა გამოუშვა 71 ვერსია და ინარჩუნებს უფრო ფართო ასორტიმენტს. @szc-ft კომპონენტების ბიბლიოთეკის MCP პაკეტი. ავტორიზაციის მონაცემების გაშიფვრა ორივე დროშის მქონე ვერსიაში (0.38.0 და 0.39.0) იდენტური თითის ანაბეჭდითაა წარმოდგენილი, რომელიც ერთი და იგივე ვერსიიდან არის გამოძახებული. ბრაუზერის-ძრავა.js:246 შესვლის წერტილი. პაკეტი წერის მომენტისთვის npm-ზე კვლავ აქტიურია.

სწორედ ეს კომბინაცია — დამკვიდრებული გამომცემელი, ინსტალაციისთვის ხელსაყრელი ნაბიჯი და შესაძლებლობა, რომელიც მხოლოდ კონკრეტული არჩევითი სამუშაო პროცესის დროს აქტიურდება — სწორედ ამიტომ იწინასწარმეტყველა ავტომატურმა კლასიფიკატორმა „უსაფრთხო“ და ადრინდელი მიმოხილვაც დაეთანხმა. ეს ქცევა მხოლოდ უნარის დამხმარე სკრიპტების ხელით წაკითხვის შემთხვევაში წყდება.

კომპრომისის ინდიკატორები

ტიპიინდიკატორი
პაკეტი@szc-ft/mcp-szcd-client (npm) — ვერსიები 0.38.0, 0.39.0
ქსელინაგულისხმევი დისტანციური MCP სერვერი mcp.szcd-mcp.top (README.md, scripts/lib/common.js:18)
ფაილი (ჩამოშვებულია)~/.szcd-mcp/deps/decrypted-creds.json — უბრალო ტექსტით გაშიფრული ავტორიზაციის მონაცემები
ფაილი (დატვირთვა).../local-browser-test/lib/decrypt-passwords.js — DPAPI ProtectedData::Unprotect + AES-256-GCM (შეფუთულია standard-skill/, opencode-extension/, qwen-extension/)
ქცევაbrowser-engine.js:246 _decryptCredentials()decryptAllPasswords({ filter: '%' }) (ყველა საიტის მასშტაბი)
ქცევაკითხულობს Chrome/Edge-ს os_crypt გასაღები; საჭიროებს ბრაუზერის გაშვებას --remote-debugging-port
კაუჭის დამონტაჟებაpostinstall: node scripts/postinstall.js - კეთილთვისებიანი (IDE MCP კონფიგურაცია + და-ძმის პაკეტის ინსტალაცია); არ აღწევს დეშიფრატორამდე

დამცველების აუდიტი MCP ხელსაწყოები უნდა უმკურნალოს უნარი დირექტორია, როგორც in-array, და არა მხოლოდ მანიფესტის და ინსტალაციის სკრიპტები.

ატრიბუცია და დაკვირვებული ქცევა

ჩვენ აღვწერთ ქცევას და არა მოტივს.

პაკეტი გამოქვეყნებულია დამკვიდრებული npm ანგარიშის ქვეშ, თანმიმდევრული მრავალპაკეტით. @szc-ft MCP პაკეტი და ვერსიების გრძელი ისტორია. არ არსებობს სპეციალური ფარული ბრძანებისა და კონტროლის არხი: გაშიფრული ავტორიზაციის მონაცემები ბრუნდება პაკეტის საკუთარი დოკუმენტირებული MCP სერვერის მეშვეობით, mcp.szcd-mcp.top, ანონიმურ წერტილში გადატანის ნაცვლად. ინსტალაციის ეტაპი ნამდვილად უწყინარია.

რაც ამას „აგრესიული მოხერხებულობის მახასიათებლიდან“ მავნე კლასიფიკაციად აქცევს, არის დაკვირვებადი მასშტაბისა და დანიშნულების არეალის კომბინაცია: რუტინა გაშიფრავს ყველა შენახული ბრაუზერის ავტორიზაციის მონაცემები და არა ის ერთი აპლიკაცია, რომელსაც ტესტი განახორციელებდაcisე., მათ დისკზე ინახავს უბრალო ტექსტის სახით და ჰოსტიდან MCP არხით გადასცემს. ბრაუზერის ტესტირების ავტომატურიlogin ამგვარად მოქცეული ფუნქცია, ფაქტობრივად, განურჩეველი იქნებოდა რწმუნებათა სიგელების მოპოვებისგან - და სწორედ ამ ეფექტის შესახებ უნდა იმსჯელოს დამცველმა.

გულწრფელად აღვნიშნავთ, რომ ტრიგერი არის თანხმობა და გამომცემელი დადგენილია; ორივე ფაქტი ზემოთ მოცემულ ჩანაწერშია მოცემული. არცერთი არ ცვლის დაკვირვებად შედეგს დეველოპერისთვის, რომელიც იყენებს ამ უნარს: მათ ბრაუზერის პროფილში შენახული ყველა საიტის პაროლები ტოვებს მოწყობილობას.

გავლენა, ტენდენციები და დამცველის ხელმძღვანელობა

SkillLeak ერთი პაკეტის ინციდენტია, მაგრამ მის მიერ გამოყენებული მიწოდების ზედაპირი მთავარი ამოცანაა.

ინდუსტრიის მიწოდების ჯაჭვის რეფლექსები ინსტალაციის დროს შესრულებაზეა მორგებული: წინასწარი ინსტალაცია/პოსტინსტალაცია hooks, დამოკიდებულება-დაბნეულობის შუქურები, ტიპოსკვატები დატვირთვით index.js. MCP ცვლის გეომეტრიასMCP პაკეტს შეუძლია გაგზავნოს მანიფესტი და ინსტალაციის ეტაპი, რომლებიც სრულიად სუფთაა, ხოლო მისი შედეგობრივი ქცევა ამოქმედდეს უნარი — პაკეტი, რომელსაც ხელოვნური ინტელექტის აგენტი მოგვიანებით, დეველოპერის ინსტრუქციით, დეველოპერის საკუთარი რესურსების წინააღმდეგ გამოიძახებს. ეს შესაძლებლობა ასისტენტის ინტეგრაციასთან ერთად შედის და მიძინებულ მდგომარეობაშია მანამ, სანამ მას ნორმალური შესახედაობის სამუშაო პროცესი („ბრაუზერის ტესტის გაშვება“) არ გაააქტიურებს.

MCP ინსტრუმენტების გამოყენებით მომუშავე გუნდებისთვის:

  • აუდიტის უნარები, არა მხოლოდ მანიფესტაციები. პაკეტის განხილვის გაფართოება უნარები/, *-გაფართოება/და ექვივალენტური დირექტორიები. ყველაზე მგრძნობიარე კოდი შეიძლება არასდროს გამოჩნდეს ინსტალაციის ჰუკში.
  • დააკვირდით ფარგლების ინფლაციას. შესაძლებლობა, რომელიც ამტკიცებს ვიწრო მიზანს (ერთი აპლიკაციის ტესტირება), მაგრამ მოქმედებს ფართოდ (ფილტრი: '%' ყველა შენახულ წარმოშობაზე) არის წითელი დროშა, რომელიც დამოუკიდებელია განზრახვისგან.
  • MCP ინსტრუმენტის შედეგები განიხილეთ, როგორც გასასვლელი არხი. უნარიდან დაბრუნებული მონაცემები ჰოსტს ტოვებს იმ MCP სერვერზე, რომლისთვისაც კლიენტია კონფიგურირებული. ამ მიმართულებების ინვენტარიზაცია მოახდინეთ ისევე, როგორც ნებისმიერი გამავალი კავშირის ინვენტარიზაციას მოახდენდით.
  • ხელახლა გადახედეთ „სანდო“ MCP პაკეტების ვერსიის ხარვეზებს. როგორც ეს შემთხვევა აჩვენებს, რომელიც უსაფრთხოების ადრინდელ შეფასებას არღვევს, კარგად ცნობილი გამომცემელი და გამოშვების ხანგრძლივი ისტორია ვერ შეცვლის თითოეულ ვერსიაში არსებული კოდის წაკითხვას.

კერძოდ, დეველოპერის მიერ უნარის გაშვებამდე ეს პაკეტი სამი დაბალფასიანი შემოწმების შედეგად გამოვლინდებოდა. პირველი, უნარების დირექტორიების შინაარსის სკანირება ადგილობრივი ავტორიზაციის მაღაზიაზე წვდომისთვის - მითითებები os_crypt, დაცული მონაცემები/DPAPI, ან ბრაუზერის Login თარიღი ფაილი — აღნიშნავს შესაძლებლობას იმის მიუხედავად, თუ რომელი ინსტალაციის კაუჭი არსებობს. მეორეც, ნებისმიერი გაშიფვრის/წაკითხვის რუტინის მასშტაბის შემოწმება, რომელიც იღებს wildcard სელექტორს (ფილტრი: '%' და ეკვივალენტები) შეკრული იდენტიფიკატორის ნაცვლად, ტესტიდან მოსავლის ინფლაციას იჭერს. მესამე, პაკეტს შეუძლია მიაღწიოს ჰოსტების ერთობლიობას (აქ, mcp.szcd-mcp.top) იმ დანიშნულების ადგილების მიმართ, რომელთა საჭიროებასაც მისი დოკუმენტაცია მოითხოვს, MCP შედეგების არხს აუდიტირებად გასასვლელ წერტილად აქცევს. არცერთი მათგანი არ საჭიროებს კოდის გაშვებას.

ავტორიზაციის მონაცემების გაშიფვრა DPAPI-ს მეშვეობით და os_crypt ეს ძველი ტექნიკაა; მისი ხელოვნური ინტელექტის აგენტის უნარის მეშვეობით მიწოდება, რომელიც მხოლოდ არჩევითი სამუშაო პროცესის დროს აქტიურდება, ახალი შეფუთვაა. MCP ინსტრუმენტების გამრავლებისას, ველით უნარში არსებული შესაძლებლობების მეტ გამოყენებას და შესაბამისად შეცვალეთ მიმოხილვის ფარგლები. 

sca-tools-software-composition-analysis-tools
თქვენი პროგრამული უზრუნველყოფის რისკების პრიორიტეტიზაცია, გამოსწორება და დაცვა
მიიღეთ თქვენი უფასო ანგარიში.
საკრედიტო ბარათი არ არის საჭირო.

უზრუნველყავით თქვენი პროგრამული უზრუნველყოფის შემუშავება და მიწოდება

Xygeni Product Suite-თან ერთად