``Mallorynak egy lopott jelszóval sikerült bejelentkeznie egy fontos szerverre, amely Linuxot futtatott. A shell egy meglehetősen szigorú shell volt, de Mallory tudta, hogy hogyan okozzon gondot. Mallory feltelepített és futtatni kezdett egy egyszerű programot, amelynek volt egy nagyon furcsa szokása -- gyorsan hozogatott létre és törölt ki különböző symlink-eket a /tmp könyvtárban, processzek sokaságát felhasználva. Mallory programja sok olyan symlink-et hozott létre, majd törölt le, amely a /etc/passwd filera mutatott.
Ezen a fontos szerveren biztonsági elővigyázatosságból minden nap futtattak Tripwire-t -- pontosabban egy régebbi verziót, a 2.3.0-ást. A Tripwire egy olyan biztonsági program, amely detektálja, ha valaki piszkálta a fontos fileokat. Amikor a Tripwire futni kezdett, megpróbált létrehozni egy átmeneti filet (temp file) a /tmp könyvtárban, úgy ahogy azt számos másik program is teszi. A Tripwire megvizsgálta, és úgy találta, hogy nincs ``/tmp/twtempa19212'' file, így azt gondolta, hogy ez pont jó lesz neki átmeneti filenak. Csakhogy miután a Tripwire ellenőrzött, Mallory programja létrehozott egy symlinket ezen a néven. Ez nem véletlen baleset volt, Mallory programja úgy lett tervezve, hogy azokon a neveken hozzon létre symlink-eket, amelyet a Tripwire többnyire használ. Ezután a Tripwire megnyitotta a file-t és elkezdte bele írni az átmeneti információkat -- de ahelyett, hogy egy új, üres filet kezdett volna írni, felülírta a /etc/passwd filet. Ezután senki -még az adminisztrátorok sem- tudtak belépni a rendszerbe, mert a passwd file megsérült. Lehetett volna rosszabb is, hiszen Mallory bármelyik filet felül tudta volna írni, akár egy a szerveren tárolt fontos file-t is.A történet kitalált, a Mallory név megszokott név a támadóknak. Viszont a támadás, és a sebezhetőség ilyen jellegű kihasználása, nagyon is gyakori. A gond az, hogy a legtöbb program támadható a versenyhelyzet (race condition) névre hallgató biztonsági hiba kihasználása folytán.''
``A versenyhelyzet bemutatása
1. Egy triviális C állítás:
b = b + 1;
Nagyon egyszerűnek látszik, nem? Tegyük fel, hogy két szál (thread) futtatja ezt a kódot, ahol is a ``b'' változó megosztott a két szál között és a változó kezdőértéke ``5''.
2.) A kód végrehajtásának egy lehetséges módja:
(szál1) betölti a ``b''-t a szál1 egyik regiszterébe
	(szál2) betölti a ``b''-t a szál2 egyik regiszterébe 
(szál1) hozzáad ``1''-et a szál1 regiszteréhez, és így kiszámolja az értéket, ami ``6''
	(szál2) hozzáad ``1''-et a szál2 regiszteréhez, és így kiszámolja az értéket, ami ``6''
(szál1) letárolja a regiszterben található értéket (6) a ``b''-be
	(szál2) letárolja a regiszterben található értéket (6) a ``b''-be
5-tel indultunk, és mindegyik szál 1-et adott hozzá, majd a végén 6-ot kaptunk... nem a várt 7-et. A probléma az, hogy a két folyamat zavarta egymást, és ez okozta a rossz választ.''
Akit érdekel a biztonságos programozás, a race condition szituációk kiküszöbölése, az olvassa el a cikket az IBM DeveloperWorks oldalain itt.