SpamAssassin je populární nástroj, který se používá ke kontrole spamu na Linuxu. Vcelku jednoduše se dá spojit s poštovními servery a svou práci dělá na základě pravidel velmi dobře. E-maily, které mu projdou rukou, jsou označkovány číslem tzv. skóre, podle kterého se pak v poštovním klientovi můžete rozhodnout, co s ním uděláte. Pokud je číslo moc vysoké, neobtěžuje se ani s dalším zpracováním a e-mail dokáže i zahodit. Některé servery roztřídí vaši poštu i za vás, ale to už záleží na jejich správci.
Chyba, o které se psalo v linuxových i jiných médiích spočívá v jednom pravidle, které už když nějaký vývojář psal, musela se pod ním klepat židle. Toto pravidlo říká, že všechny e-maily odeslané v roce 2010 až 2099 budou považovány za spam a jejich skóre se zvedne o dva až tři body. V roce 2000 by se mohlo zavedení tohoto pravidla zdát jako dobrý nápad, možná nikdo nečekal, že tu bude SpamAssassin tak dlouho, nicméně na konci roku 2009 to už jako dobrý nápad nevypadá. Pro některé e-maily jsou dva až tři body vražedným skóre, protože nachytají další body na jiných věcech jako je moc velkých písmen, vykřičníky v předmětu nebo nějaká chybějící hlavička. Nakonec se velké množství dobrých e-mailů ocitlo mezi odpadem zvaným spam.
Pravidlo je k nalezení v souboru /usr/share/spamassassin/72_active.cf
a je v něm:
##{ FH_DATE_PAST_20XX
header FH_DATE_PAST_20XX Date =~ /20[1-9][0-9]/ [if-unset: 2006]
describe FH_DATE_PAST_20XX The date is grossly in the future.
##} FH_DATE_PAST_20XX
Popisek pravidla napovídá, že bylo napsáno daleko v minulosti a autor pravděpodobně nepředpokládal, že takové datum někdy nastane. Jednoduchou úpravou se problém zas na deset let vyřeší:
##{ FH_DATE_PAST_20XX
header FH_DATE_PAST_20XX Date =~ /20[2-9][0-9]/ [if-unset: 2006]
describe FH_DATE_PAST_20XX The date is grossly in the future.
##} FH_DATE_PAST_20XX
O problému jsme psali v pondělí a před námi i po nás další weby. Uživatelé si problému ale mohli všimnout hned, jak dorazila první novoroční přání.
Tohle je jen zlomek stránek, kde se o problému píše. Byl ale opravdu tak velký, že si zasloužil takovou pozornost? Jediný důsledek tohoto „bugu“ bylo, že uživatelé našli svoje e-maily ve spamu, a to ještě ne zdaleka všechny.
Kdo je vrah
Stejně jako jinde, i tady se hledá nějaký viník. Mohli bychom prohledávat repositář a zjistit, kdo tam to pravidlo přidal. Nicméně ve hře jsou ještě administrátoři, kteří nesou zodpovědnost za své uživatele a distributoři, kteří nesou zodpovědnost za svoje dílo.
V červenci minulého roku se do repositáře SpamAssassinu dostal patch, který toto pravidlo opravuje na tvar:
header FH_DATE_PAST_20XX Date =~ /20[2-9][0-9]/ [if-unset: 2006]
Vývojáři svůj software včas opravili, i když změnu nerozdistribuovali. Vina tedy padá někam mezi distributory, kteří měli dost času, aby nová pravidla zavedli, a administrátory, kteří mají na aktualizaci pravidel ve SpamAssasinu nástroj sa-update
. Je možné, že u některých distribucí byla pravidla vyřešena už dávno.
Bohužel se do aktualizací pravidel, ani do vydání oprava nedostala, takže chyba tu zůstala dokud se neprojevila. Vina je tedy na straně vývojářů. Nicméně dobrým administrátorům, kteří často aktualizují svá pravidla a kontrolují co se s jejich serverem děje, to muselo přinést jen minimální problémy. I distributoři, resp. lidé starající se o tento konkrétní balíček, si mohli všimnout že něco není v pořádku již před nějakým časem.
Řešení celého problému může být více.
- Administrátoři serverů upraví pravidlo
- Administrátoři serverů aktualizují pravidla
- Distributoři rozšíří do svých distribucí nová pravidla
- Distributoři rozšíří do svých distribucí upravené pravidlo
Z toho vyplývá, že na některých systémech stačí jen aktualizovat, což by se mělo dělat pravidelně. Jiné systémy musí být upraveny z nějakého důvodu ručně, pokud ale distributor usoudí, že nová pravidla smysl nemají, aktualizace tuto změnu může zrušit. Ruční změna tak může navodit falešný pocit bezpečí, který se ztratí hned s další aktualizací, nejlépe automatickou.
Úplně nejlepší by byla kontrola na základě provedení jednoduchého výpočtu, kde by administrátor zadal jen počet let, za které bude e-mail považován „moc z budoucnosti“. Vyžadovalo by to ale malé úpravy v parseru pravidel SpamAssassianu.
Zasáhla vás také tato "chyba"?
Závěr
Jedná se tedy o skutečný problém? Podle mého názoru nikoli. O poštu uživatelé nepřišli, některé servery to ani nepostihlo, další administrátoři to vyřešili tak rychle, že si toho uživatelé ani nevšimli a těch pár, které to ovlivnilo, pak plní diskusní fóra nekonečnými dotazy na podivné chování poštovního serveru.
Díky rychlému šíření této zprávy společně s řešením si za týden na nějaký problém ani nevzpomeneme. Celé to připomíná počítačový problém přechodu na rok 2000, kdy někteří zlí jazykové tvrdili, že se zhroutí všechny počítače na světě. Nestalo se a o deset let později mohl díky tomu vzniknout problém úplně nový.
Jelikož oprava ze strany vývojářů i některých administrátorů spočívá posunutí data na 2020 až 2099, tak se tu pravděpodobně za deset let opět setkáme.