DLL-hijack fikset i populær kode-editor efter CIA-læk

En opdatering til Notepad++ lukker ned for en angrebsvinkel, som er nævnt i Vault 7-lækket fra Wikileaks.

Det populære open source-udviklerværktøj Notepad++ har fået en opdatering direkte i forlængelse af sidste uges læk fra Wikileaks, som angiveligt omfatter tusindvis af CIA-dokumenter.

Det fremgår af en meddelelse på hjemmesiden for udvikler-værktøjet.

Lækket, som Wikileaks kalder Vault 7, indeholder flere tusinde dokumenter, der ifølge whistleblower-tjenesten beskriver CIA’s cybers arbejde med diverse hacker-tekniker, herunder hvordan efterretningstjenesten fiflet med at kompromittere alt for mobiltelefoner til smart-tv.

I forhold til Notepad++, der en udbredt tekst- og kildekode-editor, så har CIA ifølge Wikileaks-dokumenterne haft kig på den måde, som programmet indlæser DLL-filen scilexer.dll på.

I dokumenterne i Wikileaks-lækket bliver der talt om at hijacke den pågældende DLL-fil.

»Problemet med en hijacked DLL vedrører scilexer.dll (kræves af Notepad++) på en kompromitteret PC, som bliver erstattet af en modificeret scilexer.dll bygget af CIA. Når Notepad++ bliver indlæst, så bliver den modificerede scilexer.dll indlæst i stedet for den originale,« fremgår det af Notepad++-hjemmesiden.

Hvad DLL-hijacked nærmere skal bruges til, fremgår ikke umiddelbart af det Wikileaks-dokument, som der bliver linket til fra Notepad++-hjemmmesiden, som dog indeholder et bud på formålet:

»Det betyder ikke, at CIA er interesseret i dine kodeevner eller i indholdet af dine sexbeskeder indtastet i Notepad++, men det forhindrer snarere advarselslamper i at blinke (eng. but rather it prevents raising any red flags), mens DLL’en laver dataindsamling i baggrunden.«

I beskeden på Notepad++-hjemmesiden bliver det understreget, at der ikke er tale om en sårbarhed direkte i udviklerværktøjet, som dog er blevet opdateret for at imødegå, at DLL-hijackingen kan finde sted.

Opdateringen til v7.3.3 bevirker, at programmet nu checker, hvorvidt scilexer.dll er korrekt signeret.

»Hvis certifikatet mangler eller er ugyldigt, så bliver den bare ikke indlæst og Notepad++ vil ikke starte,« står der.

Mail til bedstemor

Hvis en angriber har tilstrækkeligt med adgang til maskinen til at kunne udskifte en DLL-fil i Notepad++-mappen, så kunne man forestille sig, at der ville være andre måder at kompromittere enheden på end via DLL-filen.

Hvad det angår bliver det bemærket på Notepad++’s hjemmeside, at opdateringen i relation til Wikileaks-afsløringerne kun forhindrer, at programmet indlæser en hjemmelavet DLL-fil.

»Den forhindrer ikke, at din originale notepad++.exe bliver erstattet med en modificeret notepad++.exe mens CIA har kontrol med din PC,« står der i beskeden på hjemmesiden.

På sub-reddit’en /r/programming bliver Notepad++-beskeden flittigt diskuteret. Her fremfører en Reddit-bruger,, at hijacking af DLL-filen ikke er til at spionere på personer med, derimod skulle formålet være diskret at samle data ind via en maskine, som CIA-agenten befinder sig ved.

»Forestil dig du vil kompromittere end offentlig pc. Du har behov for at starte en bagdørsproces, og du har behov for at få det til at se ud som om, du anvender PC'en til noget legitimt imens. Så åbner du bare din kopi af Notepad++, og så vil den modificerede DLL kompromittere pc'en, mens agenten skriver en mail til sin bedstemor.«

Et andet sted i Reddit-tråden bliver det bemærket, at DLL-hijacking i relation til Notepad++ blev bemærket som et sikkerhedsproblem i 2010.

I forhold til 2010-sårbarheden skulle der ifølge andre Reddit-brugere, blandt andet her, være tale om en anden form for DLL-hijack, hvor Notepad++ narres til at indlæse en ondsindet DLL-fil uden for mappen med exe-filen.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (14)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Sune Marcher

Såeh, Notepad++'s opstartstid skal sløves med signaturcheck for at beskytte mod... hvad, præcist?

Hvis en angriber har mulighed for at droppe DLL'er (eller har fysisk adgang til din maskine) har du allerede pretty much tabt. Og det her er ikke måden at beskytte mod DLL dropping.

  • 5
  • 5
Sune Marcher

Ja der er nok lige 100mS af dit liv du ikke får igen der.


En af Notepad++'s gode egenskaber er at den er hurtig - ikke mindst på ældre hardware. Den er hurtig nok til at virke som en system-wide erstatning for notepad, i modsætning til nogle af de tungere editors derude.

Det er slemt nok at sløse med performance i sådan et værktøj, men når du gør det uden at løse nogle problemer? Og samtidig tilføjer en pæn del kompleksitet? Nope.

Den nuværende implemntation af signatur-checket løser ikke det konkrete issue (du smider bare en signed SciLexer.dll, done) - og eftersom der kun er lavet sigcheck på SciLexer og ikke på plugins er det nyttesløst.

Derudover er det den forkerte ting at (forsøge at) fixe. Hvis du vil beskytte dig mod uforvarent at loade droppede DLLs, skal du sørge for at specificere absolutte paths til dine manuelle LoadLibrary kald.

Notepad++ har ret begrænset netværkseksponering (en standardinstallation har vel kun gennem updateren?), så network exploit + dropping er ikke den mest sandsynlige angrebsvektor.

At en agent lige låner din computer og smider en USB-nøgle i og kører Notepad++ (med malware SciLexer) er for fjollet til at tage seriøst.

Det nok mest realistiske scenarie er at du ved at Notepad++ er sat til default program til whatever filtype, og du kan lokke dit offer til at klikke på et \\pwndserver\dropstuffhere\innocent.txt (hvor du også har dropped scilexer.dll) - i det tilfælde vil current working directory for notepad++.exe processen være \\pwndserver\dropstuffhere\, og manuel LoadLibrary("SciLexer.dll") vil så loade den slemme SciLexer.

Men dette angreb kan afværges helt uden signaturcheck, simpelthen ved at specificere absolutte stier. Angreb afværget, lavere kodekompleksitet, intet performance hit.

  • 5
  • 1
Lenni Madsen

Men dette angreb kan afværges helt uden signaturcheck, simpelthen ved at specificere absolutte stier. Angreb afværget, lavere kodekompleksitet, intet performance hit.


Sikke noget at anbefale... med mindre du mener //relavtive path//NotePad++//absolute path så vil jeg lige påpege at min OS instalation nok ikke ligner din... bare alene muligheden for at mit OS sprog er forskelligt for dit på en windows maskine får ideen om aboslut path til at fejle... eller fordi jeg har lyst til at at have min /program files/ på et andet drev end din installation.

  • 1
  • 1
Simon Mikkelsen

Hvis en angriber har mulighed for at droppe DLL'er (eller har fysisk adgang til din maskine) har du allerede pretty much tabt. Og det her er ikke måden at beskytte mod DLL dropping.

Det her gør det måske lidt sværere at foretage angrebet. Hvis man gør det mange steder, bliver det meget sværere og du vil være bedre beskyttet. Om ikke andet bliver angriberen tvunget til at bruge mere tid på sit angreb og har så ikke så meget tid til andre ting.

Lidt ligesom da modstandsfolkene under 2. Verdenskrig ikke vandt krigen, men de fik hevet nogle tyske soldater væk fra fronterne så balancen blev tippet lidt.

  • 1
  • 0
Sune Marcher

med mindre du mener //relavtive path//NotePad++//absolute path


Jeg mener absolut sti, som jeg skriver, ikke hardcoded sti.

Så du tager den absolutte sti hvor Notepad++ er installeret (argv[0] eller GetModuleFileName + PathRemoveFileSpec) og appender dit dll-navn til den sti. Hele pointen er at du har en absolut sti til dit LoadLibrary kald, så du ikke afhænger af current working directory.

  • 2
  • 0
Sune Marcher

Det her gør det måske lidt sværere at foretage angrebet. Hvis man gør det mange steder, bliver det meget sværere og du vil være bedre beskyttet. Om ikke andet bliver angriberen tvunget til at bruge mere tid på sit angreb og har så ikke så meget tid til andre ting.


Jeg er generelt tilhænger af at man tænker over sikkerhed, men hvis du fortsætter for langt ned af den dér sti, skal du til at indbygge sandboxing og deep learning heuristisk antivirus i hvert enkelt program du skriver. Der er jeg så personligt mere tilhænger af at lave en smule kvalificeret risk assessment og lave sikkerhedstiltag der giver mening.

Fulde stier til LoadLibrary afværger dll dropping angrebet med minimal kompleksitet og overhead. Signatur-validering giver ikke noget ekstra sikkerhed i forhold til dette angrebsscenarie, når de fulde stier er på plads - kun kodekompleksitet og performanceoverhead.

For andre typer programmer gælder andre angrebsscenarier. Jeg synes fx at det giver god mening at have sandboxing i browsere.

  • 0
  • 0
Michael Cederberg

Såeh, Notepad++'s opstartstid skal sløves med signaturcheck for at beskytte mod... hvad, præcist?

NSA har en hel kogebog for at gå efter sysops (google: "I hunt sys admins"). Hvis man kan ramme et tool som folk der har mange rettigheder bruger og hvor man føler sig "sikker" (det er jo bare en tekst editor), så er man kommet langt. Jeg kan godt se notepad++ som et spændende angrebsmål.

Signaturvalidering koster ingenting på moderne computere og burde være standard på alle eksekverbare filer. Og ja, det løser ikke alle problemer.

  • 1
  • 2
Sune Marcher

NSA har en hel kogebog for at gå efter sysops (google: "I hunt sys admins"). Hvis man kan ramme et tool som folk der har mange rettigheder bruger og hvor man føler sig "sikker" (det er jo bare en tekst editor), så er man kommet langt. Jeg kan godt se notepad++ som et spændende angrebsmål.


Muligvis. Men dll hijack kan, som jeg allerede har nævnt, løses simplere og mere effektivt end med cert-validering, og hvis du lader folk køre "det er en harmløs editor" fra en USB-stick har du med 100% garanti tabt.

Hvis du skal skrive sikker software, skal du have en idé om hvad du laver, og hvad du vil beskytte dig mod. Og jeg vil til enhver tid være fortaler for at konkrete problemer bliver løst ved at man starter med at forstå problemet, og derefter vælger en simpel og effektiv løsning, fremfor i panik at begynde at hælde magisk sovs udover sin kode.

Signaturvalidering koster ingenting på moderne computere og burde være standard på alle eksekverbare filer. Og ja, det løser ikke alle problemer.


Det giver mening i et fuldt walled-garden økosystem, men jeg er ikke enig i forhold til Windows/Linux/macOS og andre general-purpose systemer.

1) Det løser intet i forhold til dll-dropping problematikken.
2) Det giver en væsentlig barriere for open-source udviklere ("Så du siger jeg skal betale for et signing cert for at contribute et plugin? Fuck this shit.")
3) Det er intet problem for seriøse angribere at få signed hvad de end har lyst til (med de code-signing systemer der er i dag).

  • 1
  • 0
Sune Marcher

Så det er en sandhed med modifikationer at hijack'et er fikset.
CIA kan sikkert stadigt bruge den vej ind.


Well, både og.

SciLexer.dll path bliver allerede loadet med absolute path, se her - så Notepad++ var altså ikke sårbar overfor dropping i første omgang. Det vil sige at det tilføjede certifikat-validerings kode er 100% overflødigt. Det er cirka et par hundrede linjer ikke-helt-triviel kode samt reference til den ikke tidligere brugte crypt32.dll, all for nothing.

Udover at være overflødigt er det fejlimplementeret, se her: der er ikke nogen certificate pinning, så det eneste der skal til, er at lave et certifikat hvor subject name er Notepad++ - en angriber behøver ikke at have stjålet Don Ho's signing cert.

Og så er der stadig det dér med at andre plugins ikke er signed. Det er mangel på forståelse af angrebsscenariet og totalt forfejlet (samt unødigt kompliceret!) forsøg på at rette noget, der ikke var et problem i første omgang.

  • 0
  • 0
Michael Cederberg

2) Det giver en væsentlig barriere for open-source udviklere ("Så du siger jeg skal betale for et signing cert for at contribute et plugin? Fuck this shit.")

Who cares. Man kunne evt. forestille sig at Notepad++ stillede byggeinfrastruktur til rådighed for plugin developers der så kunne få deres signeret executables.

3) Det er intet problem for seriøse angribere at få signed hvad de end har lyst til (med de code-signing systemer der er i dag).

Vi kan godt blive enige om at det ikke er perfekt, men det er bedre end ingenting. Det luger de små fisk væk. Og selvom man kan få fat i en nøgle til at signere med, så er det ikke det samme som at man selv kan vælge hvem man vil fremstå som.

  • 0
  • 1
Sune Marcher

Vi kan godt blive enige om at det ikke er perfekt, men det er bedre end ingenting.


Det løser ikke ét eneste reelt problem (igen: forstå hvad angreb går ud på), så det er ikke "bedre end ingenting". Én gang til for arveprins Knud: SciLexer bliver allerede loaded med absolut sti, så der er ikke noget drop/hijack attack.

Det luger de små fisk væk. Og selvom man kan få fat i en nøgle til at signere med, så er det ikke det samme som at man selv kan vælge hvem man vil fremstå som.


Hvis du argumenterer ud fra en generel "sign all the executables!" har du muligvis ret. Hvis man argumenterer ud fra det specifikke ikke-angreb mode Notepad++ kan jeg garantere dig for at det ikke ville være et problem - men det ville heller ikke blive anvendt af "små fisk".

Who cares. Man kunne evt. forestille sig at Notepad++ stillede byggeinfrastruktur til rådighed for plugin developers der så kunne få deres signeret executables.


Du vil stille en ikke uvæsentlig barriere op for hobbyister, samt lægge en del administrativt overhead på et community der primært drives af én udvikler - til ingen verdens nytte. Undskyld, men det er simpelthen for dumt.

  • 0
  • 0
Log ind eller Opret konto for at kommentere