Dette indlæg er alene udtryk for skribentens egen holdning.

Endelig et Varnish sikkerhedshul!

Af Poul-Henning Kamp2. august 2017 kl. 12:1139
Artiklen er ældre end 30 dage

Det tog 11 år...

http://varnish-cache.org/security/VSV00001.html

http://varnish-cache.org/docs/trunk/phk/VSV00001.html

(Har lidt travlt, mere senere...)

Artiklen fortsætter efter annoncen

phk

39 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
39
7. september 2017 kl. 21:35

Nu hvor Varnish også har været påvist at have fejl der kan give problemer, er der så planer om at omskrive hele molevitten i et såkaldt sikkert sprog?

37
3. august 2017 kl. 11:06

@PHK:

De mange assert()'s er jo også maskinlæsbare kommentarer, som en statisk analyse kan bruge til at påpege (potentielt) fejlagtig kode.

Var det sådan at den nævnte StackPath.com fandt fejlen?

  • eller kan du sige noget om hvordan fejlen ellers blev fundet?
35
3. august 2017 kl. 09:52

Hej PHK,

tillykke med der gik 11 år første hul. Og fin håndtering!

Jeg er gammel C programmør men må tilstå jeg ikke ved hvad "inline-C" er jf. den side du linker til. Jeg kender selvfølgelig godt "inline" keywordet (selvom jeg yderst sjældent har brugt det) som hint til compileren om inlining af en funktion, men tænker det næppe kan være det du henviser til. Jeg ved heller ikke hvad VMOD er. Jeg har læst Kernighan's kommentar ang. manglende escape i Pascal, og det ser ud til at være en kritik af manglen på type coercion i Pascal. Men type coercion må man jo sige findes i standard C. :) Er inline C en særlig konvention eller måde at bruge C på?

34
3. august 2017 kl. 09:18

I stedet for at brokke sig over pettitesser, skulle man måske istedet glæde sig over, at de folk, der laver, og tester dette fine stykke software, så vi kan sove roligt om natten.

Ja, og så ovenikøbet tager sig tid til at skrive en udførlig forklaring om forløbet.

Så vidt jeg kan se så består brokkeriet i at:

  1. forklaringen er på engelsk,
  2. blog-indlægget her opfattes som reklame.

Det er vitterligt pettitesser, og det andet dertil antageligt udtryk for en manglende forståelse for hvad det hele handler om.

33
3. august 2017 kl. 05:19

Jeg har ingen forstand på Varnish.

Jeg synes, det er forfejlet at kritisere PHK for at poste så kort, som han gjorde. Jeg finder det interessant at en del af det pres der nu ligger, for at få rettet fejlen, syder gennem indlægget. Det gør hele sagen levende, for det første. For det andet, så er jeg sikker på PHK skriver et længere opdaterende og konkluderende indlæg, når han har tid.

Jeg har haft stor fornøjelse af at læse PHKs blog gennem tiden. Han har evnen til at koble funktionen af noget meget teknisk, sammen med meget håndgribelige resultater, som teknikken har på elementer i alle menneskers daglige liv - IT professionelle eller ej.

32
3. august 2017 kl. 00:23

I stedet for at brokke sig over pettitesser, skulle man måske istedet glæde sig over, at de folk, der laver, og tester dette fine stykke software, så vi kan sove roligt om natten.

11 år er sgu lidt af en bedrift!

30
2. august 2017 kl. 22:54

En if-sætning, der fører til en afslutning af processen efter en kort besked, er det ikke noget der netop passer til en assert()-lignende makro?

Uhm...

Det If statement skal netop ikke føre til afslutning af processen, men håndtere ubrugeligt input fra klienten som en fejlsituation.

Fordi if statement ikke fanger negative tal, kører den videre og rammer den assert der skal sikre at vi ikke kører videre med skrammel-input.

29
2. august 2017 kl. 22:41

men jeg håber virkelig at mine brugere ikke spilder tiden bare fordi igen udnytter det her endnu.

Jeg har startet med at udrulle mitigation - tusind tak indlægget.


Til alle brokkehoveder, stop jer selv.

Bare det at i overhoved gider at spilde bits på at poste disse total ligegyldig kommentarer om at PHK ikke burde have oprette blog indlægget, er over min fatte evne.

Hvis PHK f.eks. kun havde holdt sig til at bruge Twitter som kanal til at poste det, så havde jeg ikke fanget det før evt. f.eks. Version2 eller andre sites jeg rent faktisk besøger havde skrevet om det.

28
2. august 2017 kl. 22:17

Alle der har ansvar for noget kode andre er afhængige af kan nikke genkendende til din sidste linje i opslaget. Det blev til den vigtigste takeaway i det her opslag.

Der kommer en dag hvor man må sige: Har lidt travlt, mere senere.

27
2. august 2017 kl. 21:45

Vi bruger if til ting der kan forekomme og skal håndteres som fejlsituationer.</p>
<p>Vi bruger assert til ting der ikke skal kunne forekomme - som f.eks her: Negative længder.</p>
<p>I gennemsnit er ca. 10% af alle kodelinier beskyttet af asserts i Varnish

Ja, jeg spørger så interesseret, netop fordi varnish virker eksemplarisk godt designet - og også velskrevet, selvom det første må siges at være sværere.

En if-sætning, der fører til en afslutning af processen efter en kort besked, er det ikke noget der netop passer til en assert()-lignende makro?

25
2. august 2017 kl. 20:21

way ahead of you there.

Det viser dit nu berømte patch ikke, så jeg vil præcisere mit spørgsmål til:

Hvorfor bruger koden ikke konsistent assert(), men af og til en eksplicit if med samme formål ?

22
2. august 2017 kl. 19:13

Endeligt synes jeg det er pudsigt med selve fejlbeskeden, der fejlagtigt kunne udløses.

@ PHK: Ved nærmere eftertanke, så er det jo netop sagens kerne, at fejlbeskeden ikke skulle kunne udløses af brugers input.

Så hvorfor bruger koden ikke assert() (som er det ord du anvender i din lænkede forklaring) ?

  • hvis den art af check (f.eks. mod kode- og hardware-fejl, eller andet hvor det ikke giver mening af fortsætte) ikke skal kunne slås fra ved oversættelse, så kunne du rulle din egen varnish_assert().

Det ville gøre det klart for læseren hvad formålet med if-sætningen er.

21
2. august 2017 kl. 16:00

Foruden den genlydende "Titel", synes jeg det en guldstjerne værdig.

Fantastisk at kunne følge med i dine udfordringer PHK, og endnu bedre er det, at se hvilken åben- og ærlighed der er omkring det - Keep up the spirit!

Jeg håber brugerne af Varnish tager udmeldingen til sig og ligeledes dine haters' springer indlægget her over, såfremt deres nysgerrighed ellers tillader dem det.

Held og lykke!

16
2. august 2017 kl. 14:45

"Uhm.... jo det er :-("

OK, så siger vi det.. Jeg mente et sikkerhedshul, der gav mulighed for kodeeksekvering på servereren.

14
2. august 2017 kl. 14:40

Hvor er det her blogindlæg dog ligegyldigt

Et remote exploit (hvilket dette ikke var) til varnishd ville kompromittere en betragtelig del af hele internettets webserver-kapacitet, og med den interesse det må give for sikkerhedshuller, så er det da bemærkelsesværdigt at manden ikke kan få et CVE nummer, fordi han er ukendt i den sammenhæng.

Jeg synes også at designet, med en konfigurering, der er så fleksibel, som her er værd at bide mærke i.

Endeligt synes jeg det er pudsigt med selve fejlbeskeden, der fejlagtigt kunne udløses. Den (skatteyderfinancierede) software jeg selv er med til at skrive og distribuere prøver at komme med så detaljerede fejlmeddelelser som muligt (f.eks. "Inddata A=66000 > 65535") . Men det er jo så fordi den software realistisk set ikke er nyttig på en udadvendt server, hvor man ikke vil spilde resourcer (herunder kode med risiko for fejl), på fejlmeddelelser til potentielt skumle brugere.

13
2. august 2017 kl. 14:35

Det er da relevant, men ikke i sådan en form på dette forum.

12
2. august 2017 kl. 14:28

Kan kun være enig. Hvor er det her blogindlæg dog ligegyldigt og langt mere passende til Twitter..

11
2. august 2017 kl. 14:22

Jeg forstår ikke, at Version2 tillader at du sådan bare udgiver et blogindlæg.

Jeg blev opmærksom på sikkerhedshullet i varnishd via debian-security-announce listen og tænkte at det nok ville blive nævnt her.

Jeg synes de to links ovenfor er læsværdige nok, og hvis man er uenig og f.eks. synes forfatteren roser sig selv for meget, så kan man jo altid finde noget andet læsning.

I vanlig ilende stil har PHK iøvrigt lavet slåfejlen 'mititation' på sin lænkede side nummer to.

10
2. august 2017 kl. 14:10

Al respekt for PHK, men det er trist at man er nødt til at læse ned til Joe Sørensens kommentar for at få en idé om hvad det drejer sig om.

Kunne man ikke have sendt det her ud på Twitter/alternativ, og så først til Version2 når der faktisk er skrevet en artikel?

9
2. august 2017 kl. 13:40

Jeg synes ikke at det er et problem at PHK spammer denne kanel hver gang der opdages et sikkerhedsproblem i Varnish. Han er fast blogger på Version2, så jeg forventer at han skriver hvad han Interesserer sig for.

Jeg går også ind for full disclosure. Han har før fortalt om Varnishs fortræffeligheder på denne Blog. Så jeg ser det passende at han også linker til sikkerhedsfejl i samme Blog. Det er trods alt en fejl der gør det let at DOSe en side der ligger bag Varnish, uden de store resurser.

For det andet så ser jeg PHK et irriterende men kompetent IT skeptisk brokkehoved. Der er mange irriterende skeptiske brokkehoveder på Internettet, men desværre ret få kompetente. Så jeg har det fint med at han blogger på Version2.

7
2. august 2017 kl. 13:27

"As embarrased as I am to find out that after 35 years of writing C-programs I still dont understand signed/unsigned variables, I am also incredibly proud that it took eleven years before Varnish had a major security incident."

Hvis man skriver C i 35år og stadigvæk har problem med signed/unsigned så er der ikke få problmer man kan få sig selv ind i ... så mon ikke der kan være flere overraskelser gemt.

6
2. august 2017 kl. 13:24

Du må virkelig have det svært på internettet.

3
2. august 2017 kl. 12:59

Jeg forstår ikke, at Version2 tillader at du sådan bare udgiver et blogindlæg. Hvad får vi ud af sådan et kort indlæg, som ikke engang går i dybden med problemet? Kunne det være interessant, at vente og så udgive et dybdegående blogindlæg, som man rent faktisk kan bruge til noget? Bare et forslag. Efterhånden virker det som om at PHK bare er tilladt at udgive det ene ukritiske blogindlæg efter det andet. Oftest får han høvl i kommentarsporet... fordi der efterhånden ingen værdi er i indlæggende - bare se det her indlæg.

2
2. august 2017 kl. 12:42

Uhahaha - Det er en lækkerbidsken den dér :-)

1
2. august 2017 kl. 12:22

Det må man sige er flot klaret, og tak, det er jo ikke fordi man kan firewall'e den :)