mboost-dp1

Microsoft Corporation

Enkelt tastefejl førte til kritisk sårbarhed

- Via CNET News - , redigeret af Emil , indsendt af arne_v

Da Microsoft tirsdag aften frigav to sikkerhedsopdateringer, den ene til Internet Explorer og den anden til Visual Studio, så var det på grund af et “&”, som var placeret forkert.

Dette ene tegn forårsagede en fejl i et kodebibliotek kaldet ATL (Active Template Library), der blandt andet bliver anvendt i Visual Studio. Det førte til, at blandt andet en ActiveX-kontrol fik en fejl, der kunne udnyttes til at afvikle skadelig kode.

Idet fejlen var en del af ATL, som udviklere verden over har kunnet bruge, så er der risiko for, at der er opstået fejl i mange forskellige applikationer. Microsoft opfordrer derfor alle udviklere, der har gjort brug af ATL, til at gennemgå deres kode.

Hos Microsoft vil man internt nu stramme op på procedurerne for at finde tastefejl i deres kode.





Gå til bund
Gravatar #1 - eliasr
30. jul. 2009 13:02
L o L... funny
(ja ja irellevant kommentar)
Gravatar #2 - avizion
30. jul. 2009 13:13
Og Microsoft får øjnene op for intern softwaretest?

Bedre sent end aldrig :(

Utroligt at så generelle biblioteker ikke er testet bedre...

Jeg ville måske forvente at et firma som M$ ville have en relativ stor interesse i at udgive troværdige biblioteker.

Gad nok vide hvor længe denne fejl har været tilstede...
Gravatar #3 - GibStorm
30. jul. 2009 13:14
Som om de ikke tester internt? Selvfølgelig gør de da det.

Det er umuligt at fange alle fejl i testfasen.
Gravatar #4 - avizion
30. jul. 2009 13:17
Tilføj ordet "bedre" så ;)

Overdrivelse fremmer forståelsen...

Der er bare nogle områder af software, som er mere kritisk end andre. Heriblandt er kernen og delte biblioteker... steder man tester mere intensivt end andre områder.
Gravatar #5 - Lars Hesselberg
30. jul. 2009 13:35
We are but only human :)
Gravatar #6 - masterzeb
30. jul. 2009 13:46
Der findes ikke fejlfri kode - kun kode hvor fejlene ikke er opdaget endnu...
Gravatar #7 - Casperin
30. jul. 2009 13:50
Jeg mener at de har kendt til den fejl i næsten et år nu; så det egentlige spørgsmål er hvorfor der først er sket noget nu.
Gravatar #8 - mathiass
30. jul. 2009 13:52
Selvom det selvfølgelig er ret nemt at sidde her og kloge sig så er det bestemt ikke nødvendigvis en let fejl at finde. C++ er bestemt ikke lavet med fejlfinding for øje og især ikke når det handler om memoryfejl.
Gravatar #9 - Cortz
30. jul. 2009 14:01
Alt kode er sikkert, ind til andet er bevist :D
Gravatar #10 - Slettet Bruger [180346906]
30. jul. 2009 14:25
Casperin (7) skrev:
Jeg mener at de har kendt til den fejl i næsten et år nu; så det egentlige spørgsmål er hvorfor der først er sket noget nu.


Måske sku de først finde årsagen til fejlen først?

nu ved jeg ikke meget om kode, men vil da gætte på at ét enkelt malplaceret tegn godt kan være svær at spotte
Gravatar #11 - arne_v
30. jul. 2009 14:30
#10

Den her er rigtigt svær at se.
Gravatar #12 - bjerh
30. jul. 2009 14:34
#9 Det der Apple propaganda kan du godt pakke væk! :D
Gravatar #13 - avizion
30. jul. 2009 15:52
mathiass (8) skrev:
det bestemt ikke nødvendigvis en let fejl at finde. C++ er bestemt ikke lavet med fejlfinding for øje og især ikke når det handler om memoryfejl.


Sproget har ikke meget at sige ifbm. softwaretest. For det første skal du lave en lokal test, der sikre at alle små delelementer overfører sig som tiltænkt. Dernæst tester man de enkelte elementer i samspil med omliggende klumper. Dertil kommer automatiske tests der systematisk gennemgår alle tænkelige og nogen gange utænkelige scenarier for at finde andre typer fejl. Til sidst er der manuel test hvor der sidder en flok aber og taster løs, for at finde de fejl en maskine ikke er bygget til at finde.

Nå ja - og så har de også en mængde beta-testere og dernæst resten af verdens befolkning til at spotte evt. fejl.

Men nogen fejl kan selvfølgelig være sværere at finde end andre...

Det er et stort emne, og det er ikke noget nyt, at der er fejl i software. Det er dog (stadig) aldrig godt at finde fejl i vitale og centrale dele...
Gravatar #14 - arne_v
30. jul. 2009 15:59
#13

Sproget har ikke noget med test at gøre.

Men sproget har en hel del med:
* identificere fejl via code review
* finde årsagen til fejl efter at de er identificeret
at gøre.
Gravatar #15 - mathiass
30. jul. 2009 16:04
Sproget har ikke meget at sige ifbm. softwaretest
Det har bestemt rigtig meget at sige i forhold til hvilke fejl man kan begå.

Jeg kan love dig at Microsoft gør alle de ting du nævner til overflod. Men test er per definition ukomplet. Det er bestemt altid godt at finde fejl i vitale og centrale dele! For så er de fjernet.
Gravatar #16 - mathiass
30. jul. 2009 16:09
#15: Og ved nærmere eftersyn er sproget C, men det gør det sådan set ikke bedre...
Gravatar #17 - arne_v
30. jul. 2009 16:13
#16

Hvad?

pStream->Read

ligner grangiveligt et metode kald på et object.
Gravatar #18 - mathiass
30. jul. 2009 16:16
#17: Ja, det gør det også. Blev snydt af (void*). Skal gerne indrømme at jeg ikke er den store haj udi C/C++.
Gravatar #19 - mee
30. jul. 2009 16:29
#17

Den type kald kan der sagtens blive brugt i C.

For eksempel når du arbejder med pointers og structs sammen, så skal du bruge pilen.

EDIT:
Linker lige til et yahoo answer med forklaring/bedre eksempel Yahoo
Gravatar #20 - arne_v
30. jul. 2009 16:43
#19

-> operatoren bruges også i C.

Men derfor ligner det stadig i meget høj grad et metode kald på et objekt.

Syntaktisk kunne det godt være kald af en function pointer gemt i en struct.

Men hvis man vil kode objektorienteret så vil man nok vælge C++ hvor de features er indbygget fremfor at emulere klasser via structs med function pointers.
Gravatar #21 - JensOle
30. jul. 2009 16:43
masterzeb (6) skrev:
Der findes ikke fejlfri kode - kun kode hvor fejlene ikke er opdaget endnu...


Undskyld mig, men enhver software udvikler, der vil give dig ret i det burde skifte karriere.

Det er da den sygeste fanboy undskyldning jeg længe har hørt.
Gravatar #22 - arne_v
30. jul. 2009 16:44
#16-20

Men iøvrigt står der klart og tydeligt at det er ATL. Og ATL er en C++ teknologi.
Gravatar #23 - Windcape
30. jul. 2009 16:45
A-Vizion (13) skrev:
Sproget har ikke meget at sige ifbm. softwaretest.
http://99-bottles-of-beer.net/language-perl-737.ht... - Find fejlen.

Sprog har meget med fejlfinding at gøre. Faktisk synes jeg at folk undervuderer hvor meget et godt sprog har at sige for antallet af fejl i koden.
Gravatar #24 - arne_v
30. jul. 2009 16:59
#23

Sproget har masser med at finde årsagen til fejl efter at man har fået at vide af QA at der er en fejl.

Og C/C++ er to af de værste at finde visse typer fejl i. Mystiske memory overskrivninger som giver fejl et helt andet sted end hvor de oprindeligt skete.

Men QA er bedøvende ligeglade med om det er et C++ eller et Java program de tester.
Gravatar #25 - cwap
30. jul. 2009 17:53
Sproget har en hel del at gøre med at spotte (taste)fejl - Du havde højst sandsynligt fået mindst en warning hvis du lavede samme nummer i C# eller Java.

Når det så er sagt, skal funktionelle tests fange den her type fejl. Problemet med funktionelle tests er bare at man kun tester den funktionalitet man kan forestille sig kan ske. I C/C++ (whatever) er der masser af pointers og memory-management over det hele. Det betyder at en fejl af den her størrelse ikke behøver gøre noget 99% af gangene, men give BSOD den sidste 1% - Meget som threading-fejl.

-- Og nej, 100% code-coverage behøver heller ikke fange den her fejl :)
Gravatar #26 - mathiass
30. jul. 2009 18:19
Du havde højst sandsynligt fået mindst en warning hvis du lavede samme nummer i C# eller Java.
Forskellen er at den slags fejl slet ikke kan lade sig gøre at lave i Java. Man kan for det første slet ikke pille ved pointere på den måde, og ellers ville programmet simpelthen ikke kompilere på sådan en typefejl.

Og nej, 100% code-coverage behøver heller ikke fange den her fejl
Faktisk er 100% code-coverage på ingen måde en indikation på at man har fanget den her type.

Når det så er sagt, skal funktionelle tests fange den her type fejl.
Jeg har aldrig været den store fan af at løse den her type relativt simple problemer med timevis af manuelt arbejde. Microsoft skriver også at de har tilføjet det til deres tools, så de kan finde (de fleste) tilsvarende fejl automatisk under kodningen en anden gang.
Gravatar #27 - Wassini
30. jul. 2009 20:37
Nu er det efterhånden mange år siden jeg programmerede i C/C++, men jeg husker TYDELIGT, at man hurtigt kunne løbe sur i at skulle fejlfinde håndteringen af pointers. Skulle det nu være *p eller **p eller &p eller ???? ;-)

Selv i et simpelt højniveau sprog som X++ kan der opstå fejl - jeg præsterede i dag at lave 8 fejl på 4 linjer - men så tog jeg også hjem *GGGG*
Gravatar #28 - Windcape
30. jul. 2009 20:39
Wassini (27) skrev:
Selv i et simpelt højniveau sprog som X++ kan der opstå fejl - jeg præsterede i dag at lave 8 fejl på 4 linjer
Var det ikke mere relateret til Axaptas API, end selve sproget?
Gravatar #29 - reonekot
30. jul. 2009 20:58
Den originale blog post af Michael Howard er noget mere interessant mht. hvorfor fejlen ikke er fanget mv. end nyhedskilden. Der står desuden at pointer fejlen kun er i en intern ATL udgave og ikke i de frigivende ATL version.

http://blogs.msdn.com/sdl/archive/2009/07/28/atl-m...
Gravatar #30 - Wassini
30. jul. 2009 21:09
windcape (28) skrev:
Var det ikke mere relateret til Axaptas API, end selve sproget?


Klart klart! Koden virkede jo sådan set helt fint, den gjorde bare ikke hvad den skulle. Sådan fejl kan være lige så svære at finde!
Gravatar #31 - arne_v
9. aug. 2009 02:18
Wassini (27) skrev:
Nu er det efterhånden mange år siden jeg programmerede i C/C++, men jeg husker TYDELIGT, at man hurtigt kunne løbe sur i at skulle fejlfinde håndteringen af pointers. Skulle det nu være *p eller **p eller &p eller ???? ;-)


Pascal har også pointere og den slags fejl sker meget sjældent i Pascal.

Problemet er ikke kun pointere men at C/C++ generelt antager at programmøren ved hvad han laver. En virkeligt rar egenskab, hvis man skal lave noget avanceret a la styresystems kerne. Men lidt optimistisk for den gennemsnitlige programmør.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login