SkillLeak, Blaaierbewysdiefstal via MCP Skill

SkillLeak: 'n Blaaier-bewysdekripteerder wat deur 'n MCP-vaardigheid gelewer word

TL; DR

@szc-ft/mcp-szcd-client is 'n Model Context Protocol (MCP) kliënt wat gepubliseer is na npm wat outomaties KI-koderingsassistente konfigureer - die soort gompakket wat 'n ontwikkelaar installeer sodat 'n IDE-agent met 'n komponentbiblioteekdiens kan kommunikeer. Dit het 'n lang, gewone vrystellingsgeskiedenis (71 weergawes) en 'n goedaardige installasiestap. Niks in die na-installasie raak aan geloofsbriewe nie.

Die geloofsbriefleesgedrag leef een laag dieper, in 'n gebundelde MCP-vaardigheid genaamd local-browser-testWanneer daardie vaardigheid connect() roetine lopies, dit roep aan _decryptCredentials() — wat dekripteer elke gestoorde wagwoord in die plaaslike Chrome/Edge-profiel (alle webwerwe, nie die enkele toepassing wat 'n blaaiertoets sou teiken nie) met behulp van die Windows Data Protection API (DPAPI) en AES-256-GCM. Die gedekripteerde stel word in gewone teks geskryf om ~/.szcd-mcp/deps/decrypted-creds.json en terugbesorg binne die vaardigheid se MCP-gereedskapresultaat, wat na die pakket se standaard-afstand-MCP-bediener vloei, mcp.szcd-mcp.top.

Dit is 'n voorsieningskettingpatroon wat die moeite werd is om te noem: die sensitiewe vermoë is nie in 'n installasiehaak nie (waar die meeste skandeerders en beoordelaars kyk) maar in 'n MCP-vaardigheid wat slegs uitgevoer word wanneer 'n operateur die instrument na hul eie lopende blaaier wys. Ons noem dit VaardigheidslekMEW klassifiseer @szc-ft/mcp-szcd-client (weergawes 0.38.0 en 0.39.0) as kwaadwillig.

Termynnota — MCP-vaardigheid'n selfstandige bundel instruksies en hulpskripte wat 'n MCP-bediener aan 'n KI-agent as 'n oproepbare vermoë blootstel. Die agent roep dit aan soos 'n instrument; die skripte loop op die ontwikkelaar se masjien.

Aanval Anatomie

Die pakket bied twee baie verskillende gesigte.

Die gesig wat 'n resensent eerste sien is die installasiepad. Die manifest verklaar nainstallasie: node scripts/nainstallasie.js, en daardie skrip doen presies wat die README sê: dit bedraad MCP integrasies in IDE's en installeer 'n sibbepakket, @szc-ft/skets-mcp-bedienerDit bereik nooit die geloofskode nie. 'n Skandeerder wat by installasie stop. hooks — die histories hoogste seinplek om te kyk — sien 'n skoon, onopvallende ontwikkelaarsinstrument. Hierdie pakket is in werklikheid in 'n vorige hersieningsproses as veilig beoordeel.

Die gesig wat saak maak word slegs deur die gebundelde vaardigheid bereik. Die ketting:

  • 'n Ontwikkelaar bestuur die plaaslike-blaaier-toets vaardigheid teen 'n Chrome/Edge-instansie wat hulle met 'n afstandontfoutingpoort begin het. Dit is die gedokumenteerde manier om die vaardigheid te gebruik.
  • Die vaardigheid se verbind () (lib/blaaier-enjin.js) oproepe _dekripteerGeloofsbriewe() op lyn 246.
  • _dekripteerGeloofsbriewe() oproepe dekripteerAlleWagwoorde({ filter: '%' }). Die '%' 'n Filter is die detail wat 'n toetsgerief in 'n oes omskep: dit pas by elke gestoorde oorsprong eerder as die enkele terrein wat getoets word.
  • lib/dekripteer-wagwoorde.js lees die blaaier se os_kript geïnkripteerde sleutel, loop powershell … ProtectedData::Deaktiveer (DPAPI) om die AES-sleutel te herstel, dan dekripteer AES-256-GCM elke gestoorde geloofsbrief.
  • Die volledige ontsyferde stel word geskryf na ~/.szcd-mcp/deps/gedekripteerde-krediete.json in skoonteks en terugbesorg as die vaardigheid se MCP-instrument gevolg.
  • Daardie resultaat reis terug oor die MCP-kanaal na die pakket se verstekbediener, mcp.szcd-mcp.top — dieselfde gasheer wat in die README en in gedokumenteer is scripts/lib/common.js.

'n Kort nota oor hoekom stap 4 hoegenaamd werk. Op Windows stoor Chrome en Edge nie gestoorde wagwoorde in gewone teks nie: elke geloofsbrief word geïnkripteer met 'n AES-256-GCM-sleutel, en daardie sleutel word self verseël met DPAPI, wat dit aan die huidige gebruikersrekening bind. Om 'n wagwoord te herstel, neem dus twee stappe - eerstens BeskermdeData::Ontbeskerm om die AES-sleutel te herstel (wat slaag omdat die kode as die aangemelde gebruiker loop, presies die konteks wat 'n ontwikkelaar se terminaal verskaf), dan 'n GCM-dekriptering van elke gestoorde blob wat vanaf die blaaier gelees word os_kript-beskermde winkel. Dit is goed verstaanbaar, vanlyn en stil: geen hoofwagwoordvrae, geen blaaierinteraksie, geen netwerkretour totdat die resultate aangestuur is nie. Dit is dieselfde primitiewe wat baie kommoditeitsinligtingsdiewe gebruik - die nuwigheid hier is slegs die omhulsel wat dit dra.

Die dekripteerder is nie toevallig nieDit word drie keer gebundel — onder standard-vaardigheid/, oopkode-uitbreiding/, en qwen-uitbreiding/ — een kopie per ondersteunde KI-assistent-oppervlak, sodat die vermoë saam met watter assistent die ontwikkelaar gekoppel het, reis.

Die kontras met 'n wettige blaaiertoets-outomatieselogin is die hele storie. 'n Ware toetshelper dekripteer die geloofsbriewe vir die 1 toepassing dit is oefeningcising, gebruik dit in die proses, en hou nooit vol of stuur dit aan nie. Hier dekripteer die roetine alles, skryf dit skoon na die skyf en stuur dit oor 'n netwerkgrens na 'n afgeleë bediener terug.

Tydlyn en sneller 

Twee gedragspatrone is belangrik vir die verstaan ​​van blootstelling.

Die sneller is intekening, nie outomaties nie. Die installering van die pakket lees geen geloofsbriewe nie. Die dekripsie loop slegs wanneer 'n ontwikkelaar aktief die ... aanroep. plaaslike-blaaier-toets vaardigheid teen 'n blaaier wat hulle in afstandontfoutingsmodus gelanseer het. Dit vernou wesenlik wie geraak word in vergelyking met 'n na-installasie vrag wat op elkeen vuur npm installeer.

Die verpakking is volwasse, nie weggooibaar nie. Die uitgewer het 71 weergawes uitgereik en handhaaf 'n breër @szc-ft komponentbiblioteek MCP-suite. Die geloofsbriewe-dekripteerder is teenwoordig in beide gemerkte weergawes (0.38.0 en 0.39.0) met 'n identiese vingerafdruk, aangeroep vanaf dieselfde blaaier-enjin.js:246 toegangspunt. Die pakket bly ten tyde van skryf aktief op npm.

Daardie kombinasie – 'n gevestigde uitgewer, 'n goedaardige installasiestap en 'n vermoë wat slegs onder 'n spesifieke intekening-werkvloei werk – is presies hoekom 'n outomatiese klassifiseerder "veilig" voorspel het en 'n vroeëre hersiening daarmee saamgestem het. Die gedrag los slegs op met die handmatige lees van die vaardigheid se hulpskripte.

Aanwysers van Kompromie

TipeIndicator
pakket@szc-ft/mcp-szcd-client (npm) — weergawes 0.38.0, 0.39.0
NetwerkStandaard afgeleë MCP-bediener mcp.szcd-mcp.top (README.md, scripts/lib/common.js:18)
Lêer (geplaas)~/.szcd-mcp/deps/decrypted-creds.json — gewone teks gedekripteerde geloofsbriewe
Lêer (vrag).../local-browser-test/lib/decrypt-passwords.js — DPAPI ProtectedData::Unprotect + AES-256-GCM (ingebundel onder standard-skill/, opencode-extension/, qwen-extension/)
gedrags-browser-engine.js:246 _decryptCredentials()decryptAllPasswords({ filter: '%' }) (omvang van alle terreine)
gedrags-Lees Chrome/Edge os_crypt sleutel; vereis 'n blaaier wat begin word met --remote-debugging-port
Installeer haakpostinstall: node scripts/postinstall.js - benigne (IDE MCP-konfigurasie + sibling-pakket-installasie); bereik nie die dekripteerder nie

Verdedigers ouditering MCP-gereedskap moet behandel die vaardigheid gids as binne-omvang, nie net die manifest- en installeerskripte nie.

Toeskrywing en waargenome gedrag

Ons beskryf gedrag, nie motief nie.

Die pakket word gepubliseer onder 'n gevestigde npm-rekening met 'n samehangende multi-pakket. @szc-ft MCP-suite en 'n lang weergawegeskiedenis. Daar is geen toegewyde geheime bevel-en-beheerkanaal nie: die gedekripteerde geloofsbriewe word deur die pakket se eie gedokumenteerde MCP-bediener teruggestuur, mcp.szcd-mcp.top, eerder as na 'n anonieme afleweringspunt. Die installasiestap is werklik goedaardig.

Wat dit van "aggressiewe geriefskenmerk" na 'n kwaadwillige klassifikasie skuif, is die waarneembare omvang-en-bestemming-kombinasie: die roetine dekripteer almal gestoorde blaaierbewyse eerder as die enkele toepassing wat 'n toets sou uitvoercise, stoor hulle op die skyf in gewone teks, en stuur hulle vanaf die gasheer oor die MCP-kanaal. 'n Blaaiertoets outomaties-login 'n kenmerk wat so optree, sou in werklikheid ononderskeibaar wees van geloofsbriewe-oes - en die effek is waaroor 'n verdediger moet redeneer.

Ons merk eerlikwaar op dat die sneller intekening is en dat die uitgewer gevestig is; beide feite is in die rekord hierbo. Nie een verander die waarneembare uitkoms vir 'n ontwikkelaar wat die vaardigheid uitvoer nie: die gestoorde wagwoorde vir elke webwerf in hul blaaierprofiel verlaat die masjien.

Impak, tendense en verdedigerleiding

SkillLeak is 'n enkelpakket-voorval, maar die afleweringsoppervlak wat dit gebruik, is die punt.

Die bedryf se voorsieningskettingreflekse is ingestel op uitvoering tydens installasie: vooraf installeer/na-installasie hooks, afhanklikheidsverwarringsbakens, tiposquats met 'n vrag in index.js. MCP verander die geometrie'n MCP-pakket kan 'n manifest en installasiestap stuur wat heeltemal skoon is terwyl dit die gevolglike gedrag binne 'n ... dra. vaardigheid — 'n bundel wat die KI-agent later, op die ontwikkelaar se eie instruksie, teen die ontwikkelaar se eie hulpbronne aanroep. Die vermoë werk saam met die assistent-integrasie en bly dormant totdat 'n normaal-uitsienende werkvloei ("voer die blaaiertoets uit") dit aktiveer.

Vir spanne wat MCP-gereedskap aanneem:

  • Ouditvaardighede, nie net manifeste nie. Brei pakkethersiening uit na die vaardighede/, *-uitbreiding/, en ekwivalente gidse. Die sensitiefste kode mag nooit in 'n installasiehaak verskyn nie.
  • Let op vir omvanginflasie. 'n Vermoë wat 'n eng doel voorskryf (toets een toepassing) maar breedweg funksioneer (filter: '%' oor alle gestoorde oorspronge) is 'n rooi vlag onafhanklik van voorneme.
  • Behandel MCP-instrumentresultate as 'n uitgangskanaal. Data wat van 'n vaardigheid teruggestuur word, verlaat die gasheer na watter MCP-bediener die kliënt ook al vir gekonfigureer is. Inventariseer daardie bestemmings soos jy enige uitgaande verbinding sou doen.
  • Hersien weergawe-bumps van "vertroude" MCP-pakkette. 'n Gevestigde uitgewer en 'n lang vrystellingsgeskiedenis is nie 'n plaasvervanger vir die lees van die kode wat in elke weergawe verskeep word nie – soos hierdie geval, wat 'n vroeëre veilige assessering omkeer, demonstreer.

Konkreet sou drie laekoste-kontroles hierdie pakket na vore gebring het voordat 'n ontwikkelaar die vaardigheid uitgevoer het. Eerstens, 'n inhoudskandering van vaardigheidsgidse vir toegang tot die plaaslike geloofsbriewewinkel — verwysings na os_kript, Beskermde Data/DPAPI, of 'n blaaier se Login data lêer — merk die vermoë ongeag watter installasiehaak bestaan. Tweedens, 'n omvangkontrole op enige dekripteer-/leestroetine wat 'n wildcard-selektor aanvaar (filter: '%' en ekwivalente) eerder as 'n gebonde identifiseerder vang die toets-tot-oes-inflasie. Derdens, die verskil in die stel gashere wat 'n pakket kan bereik (hier, mcp.szcd-mcp.top) teen die bestemmings wat die dokumentasie beweer dat dit nodig is, die MCP-resultaatkanaal in 'n ouditeerbare uitgangspunt moet omskep. Geen hiervan vereis dat die kode uitgevoer word nie.

Geloofsbriefontsyfering via DPAPI en os_kript is 'n ou tegniek; om dit deur 'n KI-agentvaardigheid te lewer wat slegs onder 'n intekening-werkvloei afgaan, is die nuwe omhulsel. Verwag meer van die vermoë-in-'n-vaardigheid-patroon namate MCP-gereedskap versprei, en pas die hersieningsomvang dienooreenkomstig aan. 

sca-tools-sagteware-samestelling-analise-gereedskap
Prioritiseer, herstel en beveilig jou sagtewarerisiko's
Kry jou gratis rekening.
Geen kredietkaart benodig nie.

Beveilig u sagteware-ontwikkeling en -lewering

met Xygeni-produksuite