Einen 100prozentigen Schutz vor Sicherheitslücken kann eine Programmierung nicht bieten. In den Verträgen werden trotz dieses Risikos die Sicherheitsanforderungen häufig nicht näher definiert. Der nachfolgende Beitrag soll aufzeigen, welche Haftungsregelungen für Sicherheitslücken bei der Programmierung von Websites bestehen.
Was ist ein Fehler?
Wenn Programmierer und Juristen von einem Softwarefehler sprechen, gehen sie von zwei unterschiedlichen Begriffen aus. Bei der rechtlichen Beurteilung der Frage, ob ein Fehler vorliegt, wird nicht auf den Fehlerbegriff der Informatik abgestellt. Es gibt unabhängig von der Informatik einen juristischen Fehlerbegriff. Für die Sichtweise der Juristen ist es beispielsweise unerheblich, ob das Programm an sich laufen könnte und insofern isoliert betrachtet funktionsfähig wäre. Dies steht einem "juristischen" Mangel nicht entgegen.
Das Bürgerliche Gesetzbuch (BGB) fordert für Kaufverträge in § 433 Absatz 1, dass eine Kaufsache frei von Sachmängeln zu sein hat. Dabei differenziert das Gesetz nicht zwischen erheblichen und unerheblichen Mängeln. Aus Sicht des Gesetzgebers hat ein Verkäufer eine fehlerfreie Programmierung oder ein fehlerfreies Programm zu liefern. Auch für Werkverträge stellt der Gesetzgeber in § 633 BGB die Forderung auf, dass das zu erstellende Werk frei von Sach- und Rechtsmängeln sein muss.
Ohne genauere vertragliche Angaben wird bei der Programmierung von Websites erwartet werden können, dass wie bei jedem anderen technischen Produkt der Stand der Technik eingehalten wird. Wird dieser Stand der Technik unterschritten, so liegt ein haftungsbegründeter Sicherheitsmangel vor.
Je nach Umfang der Beauftragung können Firewalls und Scan-Programme gegen zum Zeitpunkt der Programmerstellung gängige und bekannte Viren zum Stand der Technik zählen. Allerdings müssen Firewalls nicht unüberwindlich sein.
Es empfiehlt sich, auf absehbare Sicherheitslücken oder beispielsweise den Einsatz von offenen Protokollen vertraglich hinzuweisen oder in den vertraglichen Regelungen die geschuldeten Schutzmaßnahmen konkret zu beschreiben.
Wer muss was beweisen?
Die Beweislast für eine Sicherheitslücke hat der Käufer oder Auftraggeber (Ausnahme: Der Käufer ist ein Verbraucher und kein Unternehmen). Bei einem Kaufvertrag kommen ergänzend die kaufmännischen Untersuchungs- und Rügeobligenheiten für den Handelskauf hinzu. § 377 Abs. 1 HGB fordert von einem kaufmännischen Käufer, dass dieser die gelieferte Sache unverzüglich auf Mängel untersucht und entdeckte Mängel unverzüglich gegenüber dem Verkäufer rügt. Wird die Untersuchung und Rüge unterlassen, gilt die Ware als genehmigt. Der Käufer verliert damit seine Gewährleistungsrechte.
Die Anwendung des Kaufrechts auf die Programmierung von Websites erscheint für Nicht-Juristen ungewohnt und vielleicht sogar abwegig. Allerdings hat der Gesetzgeber durch die Schuldrechtsreform eine wichtige Änderung in § 651 BGB vorgenommen. Nach den Regelungen dieser Vorschrift, ist das Kaufrecht bei der Lieferung herzustellender beweglicher Sachen anzuwenden. Zurzeit wird in der juristischen Diskussion überwiegend die Auffassung vertreten, dass Software eine Sache ist. Bei der individuellen Programmierung für Kunden wird eine herzustellende bewegliche Sache geliefert. Dann ist das Kaufrecht mit den speziellen Gewährleistungsregelungen anzuwenden. Gerichtsurteile zu diesem Thema liegen noch nicht vor und sind auch von oberinstanzlichen Gerichten nicht kurzfristig zu erwarten. Diese rechtliche Einordnung ist vielen Kunden und Auftraggebern ebenfalls nicht geläufig. So lässt sich insbesondere der Verweis auf die kaufmännischen Untersuchungs- und Rügepflichten in Auseinandersetzungen aus Sicht des Auftragnehmers positiv verwenden.
Zeitnahe Beseitigung
Aufgrund der rechtlichen Einordnung einer Individual-Programmierung zu den kaufrechtlichen Regelungen des BGB, wird nachfolgend ausschließlich auf die kaufvertraglichen Mängelbeseitigungsrechte Bezug genommen. Wenn die erstellte Website nicht den vertraglichen Anforderungen entspricht oder Sicherheitslücken nach dem Stand der Technik nicht hätten auftreten dürfen, liegt ein Mangel der Programmierung vor.
Als erstes Recht steht dem Käufer und Kunden ein Nacherfüllungsanspruch zu. In § 439 Abs. 1 BGB kann der Käufer nach seiner Wahl die Beseitigung des Mangels oder die Lieferung einer mangelfreien Sache verlangen. Im Gesetz ist nicht festgelegt, wie schnell eine Nacherfüllung erfolgen soll. Allerdings wird generell von einer zeitnahen Beseitigung des Mangels ausgegangen. Es empfiehlt sich aber für den Programmierer aus anderen Gründen, auftretende Mängel unverzüglich zu beseitigen.
Wenn die Beseitigung eines Mangels eine unangemessen lange Zeit in Anspruch nimmt, hat der Auftraggeber, die über die Möglichkeit, vom Vertrag zurückzutreten und damit das Vertragsverhältnis aufzulösen. Daneben besteht für die Zeit der Nacherfüllung und Mängelbeseitigung eine Schadensersatzpflicht. Am Beispiel eines beim
Auftraggeber aufgrund einer Sicherheitslücke eindringenden Virus bedeutet dies, je länger die Sicherheitslücke besteht und die Viren tätig werden, je höher wird ggf. die Schadensersatzpflicht. In der Praxis wird der Kunde darüber hinaus eine Nachfrist setzen, innerhalb derer er eine entsprechende Mängelbeseitigung erwartet. Dann ist seitens des Auftragnehmers bekannt, innerhalb welcher Zeit der Kunde ein Tätigwerden fordert.
Kostenfreie Beseitigung
Wenn ein Mangel bei der Programmierung der Software vorliegt, so legt das Gesetz dem Auftragnehmer und Verkäufer die Kostentragung für die Nacherfüllungsarbeiten auf. Der Auftragnehmer hat die zum Zwecke der Nacherfüllung erforderlichen Aufwendungen, insbesondere Transport-, Wege-, Arbeits- und Materialkosten zu tragen.
Aus Sicht des Gesetzgebers ist diese Kostentragungspflicht denklogisch, da der Auftragnehmer und Verkäufer seine Pflicht zur Lieferung einer mangelfreien Programmierung nicht nachgekommen ist und so "bestraft" wird.
Öffentliche Hinweispflicht
Bei Sicherheitslücken, die als Serienfehler auftreten oder konstruktionsbedingt sind, kann sowohl den Hersteller als auch den Auftragnehmer eine Hinweispflicht oder weitergehend eine öffentliche Hinweispflicht auf Updates oder gar eine Rückrufpflicht treffen. Allerdings legt das BGB keine genaueren rechtlichen Voraussetzungen fest. Das Gesetz fordert nur eine Rücksichtnahme auf Rechtsgüter und Interessen der anderen Vertragspartei, aus der sich entsprechende Pflichten ergeben.
Schadensumfang
Häufig lässt der Auftraggeber und Kunde eingetretene Schäden an Datenbeständen, Software oder Hardware von eigenen festangestellten Mitarbeitern beseitigen. Dann kann er anteilige Arbeitslöhne nicht als Schaden einfordern. Es handelt sich bei diesen Kosten um so genannte "Sowieso-Kosten". Der Arbeitnehmer des Kunden hätte auch ohne den konkreten Arbeitsanfall auf der Gehaltsliste des Auftraggebers gestanden. Der Kunde hätte ihn sowieso bezahlen müssen. Anders ist die Situation zu beurteilen, wenn ein Mitarbeiter durch die Arbeiten zur Schadensbeseitigung für einen längeren Zeitraum seinen eigentlichen Aufgaben nicht nachkommen kann und beispielsweise der Arbeitgeber externe Kapazitäten zu kaufen muss, um den internen Ausfall zu kompensieren.
Daneben können als Schadensposition die weiteren Schäden vom Kunden eingefordert werden, die eintreten, weil die Sicherheitslücke das Computersystem oder gar die Produktion des Unternehmens stillgelegt hat.
Haftungsausschlüsse in Verträgen
Aus Sicht des Anbieters und Auftragnehmers sollte eine Haftung insbesondere durch eine genaue Beschreibung des Fehlerbegriffs in den Verträgen reduziert werden. Ein Fehler ist eine für Käufer nachteilige Abweichung der Ist-Beschaffenheit von der Soll-Beschaffenheit der Kaufsache. Die Definition der Soll- Beschaffenheit richtet sich vorrangig nach den vertraglichen Vereinbarungen.
Soweit Verträge oder Vertragsregelungen gegenüber Kunden häufiger genutzt werden, fallen diese unter die gesetzlichen Regelungen zu den Allgemeinen Geschäftsbedingungen. Wenn Allgemeine Geschäftsbedingungen vorliegen, sind Haftungsausschlüsse für Sicherheitslücken nur in sehr engen Grenzen möglich. In individuell ausgehandelten Verträgen sind dagegen die Spielräume größer.
Zusammenfassend ist einem Auftragnehmer und Programmierer zu empfehlen, insbesondere Wert auf die vertraglichen Festlegungen zur Fehlerdefinition zu legen.
Daneben sollten die Möglichkeiten der vertraglichen Haftungsreduzierungen genutzt werden.