
CVE-2026-77818 - Yordam Kütüphane Otomasyon Sistemi - Reflektierte HTML-Injektion an drei separaten Stellen, Übernahme der Formularaktion und Diebstahl von Anmeldedaten (CWE-79)
CVE-2026-77818 · CVSS 3.1 6.1 (Mittel) · Präsidium für Cybersicherheit · Veröffentlicht 2026-09-04 · TR-26-1011
Status: Die Schwachstellen wurden in Version v22.2 behoben. Betroffene Installationen müssen auf v22.2 oder höher aktualisiert werden.
Das Yordam-Bibliotheksautomatisierungssystem ist eine kommerzielle Bibliotheksautomatisierungs- und Online-Katalogsoftware (OPAC), die in der Türkei häufig in Universitäts-, öffentlichen und institutionellen Bibliotheken eingesetzt wird. Die Installation erfolgt on-premise; bei jedem Kunden läuft eine separate Kopie.
In Version v22.1 des Produkts existieren an drei voneinander unabhängigen Stellen reflektierte HTML-Injektionen. Alle drei erfordern keine Authentifizierung, alle drei werden über einen einzigen Link ausgelöst.
| # | Stelle | Grundursache |
|---|
| 1 | Anmeldeseite, Parameter devam | Keinerlei Escaping angewendet |
| 2 | value-Attribut eines versteckten Formularfelds | Zweite URL-Decodierung nach dem Escaping |
| 3 | name-Attribut eines versteckten Formularfelds | Escaping nur auf den Wert angewendet, nicht auf den Namen |
Da sich alle drei in derselben Version desselben Produkts und in derselben Schwachstellenklasse befinden, wurden sie unter einer einzigen Meldung zusammengefasst und unter einer einzigen CVE-ID veröffentlicht. In Bezug auf die Auswirkung ist Punkt 1 der schwerwiegendste.
devamDies ist der kritischste Punkt. Die Injektionsstelle befindet sich direkt im HTML-Tag des Authentifizierungsformulars selbst.
Der Parameter devam trägt die Adresse, zu der der Benutzer nach der Anmeldung zurückkehren soll, und kommt hex-kodiert an — der Wert 2f796f7264616d2f bedeutet /yordam/. Die Anwendung decodiert diesen Wert aus Hex und schreibt ihn in das Öffnungs-Tag des Anmeldeformulars. Dazwischen gibt es keinerlei Escaping:
<form class='girisForm collapse show ikiAdimliGiris' method='post'
action='inc/islem.fm.inc.php'
data-url='<HEX-DECODIERTE BENUTZEREINGABE>'
autocomplete="off">
In der Ausgabe erscheinen <, > und Anführungszeichen als Rohzeichen. Das Einzige, was das Payload zusammenhält, ist die Tatsache, dass das data-url-Attribut in einfache Anführungszeichen gesetzt ist. Sobald ein einfaches Anführungszeichen in die Eingabe eingefügt wird, ist es damit vorbei: Das Attribut wird geschlossen, das <form>-Tag wird geschlossen, und das vom Angreifer geschriebene HTML ersetzt das Authentifizierungsformular der Seite.
Das Formular-action wird übernommen. Hier wird kein gefälschtes Formular gezeichnet — das eigene Formular der Anwendung wird leer gelassen und geschlossen, unmittelbar danach wird ein neues <form> mit denselben CSS-Klassen geöffnet. Da alle Felder für Benutzername, Passwort und Verifizierungscode auf der Seite aus dem ursprünglichen HTML der Anwendung stammen, bleiben sie innerhalb dieses neuen Formulars. Der Benutzer sieht das echte Formular, füllt das echte Formular aus; die eingegebenen Informationen gehen an den Server des Angreifers. Optisch gibt es keinen erkennbaren Unterschied.
Der kritische Punkt: Die Injektion erfolgt nicht auf einer beliebigen Seite, sondern auf der Seite, auf der der Benutzer ohnehin erwartet, sein Passwort einzugeben. Bei einer gewöhnlichen reflektierten Injektion muss der Angreifer das Opfer überzeugen; hier übernimmt die eigene Oberfläche der Anwendung die Überzeugungsarbeit.
value-Attribut eines versteckten Formularfelds — Doppelte URL-DecodierungAuf der Suchseite werden die Werte der GET-Parameter in versteckte Formularfelder geschrieben. An dieser Stelle wird Escaping angewendet — aber in der falschen Reihenfolge.
Derselbe q-Wert wird in einer einzigen Antwort in drei verschiedenen Kontexten verwendet, von denen jeder eine andere Decodierungstiefe aufweist:
| Kontext | Decodierung | Status |
|---|---|---|
JS-String im <script>-Block | 1 Mal | Sicher |
Hauptsuchfeld <input value="…"> | 1 Mal | Sicher |
Versteckte Formularfelder <input type='hidden' value="…"> | 2 Mal | Schwach |
Die Verarbeitungsreihenfolge ist wie folgt:
Client-Eingabe : %2522
↓ $_GET-Analyse
PHP-Variable : %22
↓ Eingabefilter → sieht keinen schädlichen Inhalt, keine Anführungszeichen vorhanden
↓ htmlspecialchars → keine zu escapenden Zeichen, keine Änderung
↓ urldecode → %22 wird decodiert
Auf die Seite : " ← rohes Anführungszeichen, Ausbruch aus dem Attribut
Während der Eingabefilter und das Escaping auf der ersten Decodierungsebene arbeiten, wird die Ausgabe aus der zweiten Ebene gespeist. Beim Vergleich desselben Payloads in einfach und doppelt kodierter Form wird der Unterschied deutlich:
| Gesendet | Antwort | Ausgabe des versteckten Felds |
|---|---|---|
q=foo%22… (einfache Kodierung) | 302 Found | value="foo"…" — Filter fängt es ab |
q=foo%2522… (doppelte Kodierung) | 200 OK | value="foo"><…>" — rohes HTML |
Die Schwachstelle ist nicht auf den Parameter q beschränkt. Der Block, der die versteckten Felder erzeugt, iteriert über alle GET-Parameter der Anfrage; sie wurde zusätzlich auf tip und alan verifiziert.
name-Attribut eines versteckten Formularfelds — Injektion im ParameternamenDerselbe Block erzeugt für jeden GET-Parameter die folgende Struktur:
<input type='hidden' name="<PARAMETERNAME>" value="<PARAMETERWERT>"/>
Das Escaping wird nur auf die value-Seite angewendet. Auf die name-Seite wird es überhaupt nicht angewendet. An dieser Stelle ist auch keine doppelte Kodierung erforderlich — eine einfache Kodierung genügt, da es kein Escaping gibt, das umgangen werden müsste.
Ein erfundener Parametername wird direkt als Rohwert in das name-Attribut geschrieben, und es kann aus dem Attribut ausgebrochen werden. Da der Parametername unter der Kontrolle des Angreifers steht, muss es sich nicht um einen von der Anwendung erkannten Parameter handeln.
Die Punkte 2 und 3 dieser drei Stellen stammen aus demselben Codeblock, und dieser Block wiederholt sich in sechs verschiedenen Formularen: dilForm, adetForm, siralaForm, tkForm, ekForm, tmForm. Das bedeutet, dass die Injektion in einer einzigen Anfrage sechsmal erfolgt.
Dass der Block dynamisch ist, wurde durch den Vergleich der Ausgaben zweier Anfragen verifiziert:
Anfrage A: ?p=1&dil=0&alan=&tip=basit&gorunum=liste&q=…
Ausgabe A: name="p" · name="alan" · name="tip" · name="gorunum" · name="q"
Anfrage B: ?p=2&dil=0&devam=…
Ausgabe B: name="p" · name="devam"
Die erzeugten Felder stammen nicht aus einer festen Liste, sondern werden direkt aus den Parametern der Anfrage abgeleitet. Folglich steht sowohl der Inhalt, der in das name- als auch der in das value-Attribut geschrieben wird, unter der Kontrolle des Angreifers.
Das Einzige, was der Angreifer benötigt, ist ein Link, den das Opfer öffnet. Er muss sich nicht anmelden oder ein Konto besitzen.
action-Ziel des Anmeldeformulars auf den Angreifer umgeleitet. Verifiziert.Da die betroffene Plattform die Anmeldedaten und personenbezogenen Daten von Bibliotheksmitgliedern speichert, ist über kompromittierte Konten ein Zugriff auf Mitgliederdatensätze möglich.
Die Anwendung verwendet CSP, und script-src sowie object-src sind nonce-basiert; klassisches script-basiertes XSS funktioniert auf diesen Seiten also nicht. Auf den ersten Blick scheint dies den Befund auf das Niveau einer „bloßen Inhaltsmanipulation" zu reduzieren.
Die vollständige Richtlinie lautet:
Content-Security-Policy: script-src 'nonce-...'; object-src 'nonce-...'; frame-ancestors 'self'
Es gibt kein form-action. Es gibt auch kein default-src — folglich gibt es keinen Rückfallwert für nicht definierte Direktiven. Ergebnis: Das POSTen des Formulars an den Server des Angreifers wird vom Browser in keiner Weise blockiert.
Zum Stehlen von Anmeldedaten ist es nicht erforderlich, JavaScript auszuführen. Reines HTML genügt, und CSP stoppt reines HTML nicht.
Primär
Zugehörig
Im CVE-Eintrag wird die primäre Schwachstelle als CWE-79 klassifiziert. Auf der Ebene der Grundursache ist CWE-116 aussagekräftiger: Die Ursache aller drei Stellen ist, dass das Ausgabe-Escaping entweder gar nicht oder in der falschen Reihenfolge angewendet wird.
Es ist anzumerken, dass in diesem Produkt kein Script ausgeführt wird — die vom Produkt selbst gesendete nonce-basierte script-src-Richtlinie erlaubt dies nicht, und der Nonce-Wert kann nicht cross-origin gelesen werden. Die tatsächlich eintretende Auswirkung ist keine Script-Ausführung, sondern HTML-Injektion und die Übernahme des Anmeldeformulars. Die Zuordnung zu CAPEC-148 (Content Spoofing) wurde aus diesem Grund vorgenommen.
CWE-174 gilt insbesondere für Punkt 2 — die zweite Decodierung derselben Daten nach dem Escaping.
Mittel — CVSS 3.1 Basiswert 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N)
Der Angreifer benötigt keinerlei Berechtigungen; da das Opfer den vorbereiteten Link öffnen muss, ist Benutzerinteraktion erforderlich. Der Scope wurde als Changed bewertet, da der injizierte Inhalt im Sicherheitskontext des Browsers verarbeitet wird.
Alle drei Stellen entsprechen demselben Wert. In Bezug auf die Auswirkung ist Punkt 1 der schwerwiegendste: Da die Injektion direkt im Tag des Authentifizierungsformulars selbst erfolgt, sind die Übernahme des Formular-action-Ziels und der Diebstahl von Anmeldedaten möglich.
Yordam-Bibliotheksautomatisierungssystem
Betroffen : v22.1 und früher
Behoben : v22.2
Die Verifizierung wurde auf v22.1 durchgeführt. Die Schwachstellen sind kein institutionsspezifischer Konfigurationsfehler, sondern stammen aus gemeinsamen Oberflächenkomponenten des Produkts; sie betreffen alle Installationen derselben Versionsfamilie. Der Status älterer Versionen muss vom Hersteller bewertet werden.
Da die Installationen on-premise erfolgen, bleiben Installationen, die das Update nicht angewendet haben, auch dann betroffen, wenn der Hersteller den Fix veröffentlicht hat.
| # | Endpunkt | Ausgabestelle |
|---|---|---|
| 1 | GET /yordam/?p=2&dil=<n>&devam=<hex> | data-url-Attribut des Anmeldeformulars |
| 2 | GET /yordam/?p=1&…&<parameter>=<payload> | value-Attribut des versteckten Formularfelds |
| 3 | GET /yordam/?p=1&…&<payload>=1 | name-Attribut des versteckten Formularfelds |
Die Punkte 2 und 3 stammen aus demselben Block zur Erzeugung versteckter Felder; der Block wiederholt sich in den Formularen dilForm, adetForm, siralaForm, tkForm, ekForm und tmForm.
Die Schwachstellen wurden vom Hersteller behoben. Die Anwendung sollte auf v22.2 oder höher aktualisiert werden.
| CVE-ID | CVE-2026-77818 |
| Zuweiser (CNA) | TR-CERT (USOM) — Präsidium für Cybersicherheit der Republik Türkei |
| Status | PUBLISHED |
| Reserviert | 2026-08-21 |
| Veröffentlicht | 2026-09-04 |
| Sicherheitsmeldung | TR-26-1011 |
| Titel des CVE-Eintrags | Reflected HTML Injection via Form Hijacking in Yordam Informatics's Library Automation System |
| CAPEC | CAPEC-148 — Content Spoofing |
Hersteller: Yordam Bilgi Teknolojileri Danışmanlık Eğitim ve Elektronik Sistemler Sanayi ve Ticaret A.Ş.
Alkım Coşkun – Netlore Security
| Datum | Ereignis |
|---|---|
| 2026-08-20 | Schwachstellen entdeckt und verifiziert |
| 2026-08-21 | Dem Präsidium für Cybersicherheit gemeldet; CVE-ID reserviert |
| 2026-09-04 | CVE-2026-77818 veröffentlicht, Sicherheitsmeldung TR-26-1011 bekannt gegeben |