Onderzoekers van Rapid7 Labs hebben een nieuwe Linux-toolkit ontdekt die is ingebouwd in trojanized HAProxy load balancers bij twee organisaties in Zuid-Korea. De aanval is opvallend omdat de manipulatie plaatsvindt binnen de eigen HAProxy-omgeving: webpagina’s worden aangepast voor een beperkte set bezoekers, terwijl backend-logs volgens de onderzoekers nauwelijks of geen aanwijzingen bevatten.
De implant die in de debug-strings van de code “ted” wordt genoemd, richt zich niet op een kwetsbaarheid in HAProxy zelf. Het gaat om toegang tot de host, waarna een bestaande, draaiende HAProxy-binary kan worden vervangen. Daarmee schuift de focus van “patchen tegen een bug” naar “detecteren tegen gewijzigde binaries en afwijkend gedrag”.
In dit artikel leggen we uit hoe de TED-backdoor HAProxy werkt, welke voorwaarden de aanvaller hanteert om verkeer te beïnvloeden, en welke praktische acties organisaties kunnen nemen.
Wat is er gevonden in de trojanized HAProxy?
Rapid7 beschrijft dat de toolkit direct is samengesteld in de trojanized HAProxy load balancers van twee Zuid-Koreaanse doelwitten. Binnen die binaries onderschept de aanvaller HTTP-verkeer en serveert aangepaste pagina’s aan specifieke bezoekers.
Belangrijk: volgens de onderzoekers is het geen HAProxy-kwetsbaarheid. De implant kan alleen worden “geplaatst” als de aanvaller code-uitvoering op de server heeft en de lopende HAProxy-binary kan vervangen. Met andere woorden: de aanval veronderstelt al een eerste compromittering van de host.
Geen C2 naar de backend: waarom logs het niet laten zien
Een van de meest verwarrende aspecten voor defenders is dat command-and-control (C2)-verzoeken niet door het normale verkeer naar een backendserver lopen. Bovendien zou de implant C2-activiteiten wissen uit de connection counters die HAProxy zelf gebruikt.
Dat betekent concreet dat backend-logging en load balancer statistieken doorgaans geen C2-verzoeken terug zouden geven. Rapid7 geeft daarbij aan dat er aanvullende bewijslast nodig is voor een definitieve attributie.
Hoe de C2 “verstopt” wordt
Rapid7 rapporteert dat er een specifieke request wordt gebruikt om de filterfunctie in C2-modus te zetten. Wanneer die trigger binnenkomt, verlaagt de implant de live connection counters van HAProxy. Daardoor verdwijnt de connectie uit de statistieken.
Vervolgens schrijft de implant het commando-lichaam naar een named pipe onder /tmp. Als daarna een kanaal wordt “uitgezet” (via het nulzetten van de request channel), blijft er volgens de onderzoekers niets over om door te sturen. De afhandeling blijft dan binnen de load balancer.
De output komt terug via een raw socket met een standaard HTTP/1.0 200 OK-header. Voor een normale bezoeker lijkt het dus op doorsnee webverkeer.
Alleen voor geselecteerde bezoekers: whitelisting en operator-keys
Niet elk verzoek wordt gemanipuleerd. De implant past alleen content aan wanneer aan meerdere voorwaarden is voldaan. Volgens Rapid7 moeten aanvragen onder andere een passende User-Agent bevatten en passen bij URL- en referer-patronen die in regels zijn vastgelegd.
Daarna valt de “delivery” uiteen in twee routes. De eerste route is een whitelist op basis van het clientadres: de exacte waarde wordt gecontroleerd, én opnieuw op /24-niveau. Als de client niet in die set valt, kan een tweede mechanisme alsnog de filtering override’en.
De tweede route gebruikt een operator-key in de Accept-Language-header. Wanneer die aanwezig en correct is, kan de address filtering volledig worden omzeild. In de praktijk betekent dit dat dezelfde HAProxy-binary verschillende “looks” kan aannemen, afhankelijk van de context van het verzoek.
Contentmanipulatie zonder dat de grootte opvalt
Zodra een request in aanmerking komt voor de interventie, voert de TED-backdoor HAProxy wijzigingen door in de uitgaande reactie. Rapid7 noemt onder meer dat de implant het content type en de content length herschrijft.
Ook dwingt de implant de responsstatus naar 200 en verwijdert ze de Accept-Ranges-header. Dat detail is niet toevallig: als een client byte-ranges kan opvragen, zou hij mogelijk merken dat de grootte of opbouw van de content afwijkt.
Alleen requests die aan vier checks voldoen krijgen een gemodificeerde pagina terug. Dat maakt “terugvinden door alleen webpagina’s te vergelijken” lastiger: de meeste bezoekers zien gewoon de originele inhoud.
Waar kwam de toegang vandaan? Een hypothese met beperkte bevestiging
Rapid7 meldt dat de verzamelde aanwijzingen niet genoeg zijn om het tijdlijnverloop te reconstrueren of om met zekerheid te bepalen hoe de aanvallers initieel binnenkwamen.
De onderzoekers komen wel met een hypothese: ze verwachten een ingang via een exposed groupware portal. Als onderbouwing verwijst Rapid7 naar onderzoek dat Kimsuky koppelt aan compromitteren van een groupware vendor via een mailserver-kwetsbaarheid.
Die koppeling is dus niet “hard bewezen” in deze specifieke casus, maar het helpt om de mogelijke aanvalsketen te duiden.
Stagergedrag: timing, root-checks en opschoonacties
Volgens Rapid7 plaatst de stager zichzelf alleen op plekken waar HAProxy of cron al draait. Voor het echte inbouwen controleert de implant ook of hij als root draait.
Daarna wordt het /usr/bin/cron pad niet alleen overschreven, maar krijgt het vervangende bestand bovendien de creatietijd van /usr/bin/ssh. Dat is een poging om sporen in bestandsmetadata te versluieren.
Om detectie verder te beperken verwijdert de toolkit trefwoorden als tmp, wget, cron en crond uit de bash history van root én uit zes systeemlogs, waaronder auth.log en audit/audit.log.
Extra componenten: versleutelde wachtwoorden en meerdere trojanized services
Rapid7 beschrijft ook een trojanized sshd binnen dezelfde toolkit. Die component vangt plaintext wachtwoorden af, versleutelt ze en schrijft ze naar een vast pad.
Daarnaast trof Rapid7 dezelfde code aan in trojanized varianten van agetty, atd en polkitd. Daarmee breidt de aanvaller de kans uit om credentials of controle te verkrijgen via meerdere entry points op het systeem.
RAT-gedrag: “curlRAT” als verbinding en bewerkingskanaal
In de rapportage komt ook een companion remote access trojan (RAT) voorbij die Rapid7 “curlRAT” noemt. Deze RAT maakt elke 12 uur standaard contact, maar kan volgens de onderzoekers worden teruggeschakeld naar een interval van 30 seconden wanneer de operator een vlag instelt.
De RAT lijkt bovendien te controleren of het systeem virtueel is. Alleen wanneer er een markerbestand aanwezig is dat dat type omgeving bevestigt, gaat de RAT verder. Rapid7 noemt dat als belangrijke aanwijzing voor het operationele controleproces van de aanvaller.
Rapid7 benadrukt dat curlRAT een andere familie is dan “CurlBack RAT”, een aparte naam die in eerdere rapporten werd gekoppeld aan de SideCopy-groep.
Indicators van compromis (IoC’s) en wat je ermee kunt
Rapid7 publiceert meerdere IoC’s, waaronder domeinen en bestandslocaties. Enkele domeinen die zijn genoemd zijn:
- img.monderhouse[.]space
- img.smartnords[.]site
- img.darklights[.]store
- img.responsive.pstatic[.]autos
- img.socialteams[.]store
- img.worksongo[.]store
Daarnaast worden onder meer deze bestanden genoemd:
- ~/cache/haproxy-1000.cache
- /var/lib/sshd/c8c68e629bba773a10ac80012d10bf19
- /var/lib/snapd/g580
- /tmp/jasper-log
Er worden ook SHA-256 hashes vermeld voor geobserveerde componenten.
De onderzoekers geven bovendien aan dat een bevestiging via DNS erop neerkomt dat deze domeinen op dat moment niet actief resolveerden (NXDOMAIN). Rapid7 en de rapportage stellen dat die namen vooral nuttig zijn voor het analyseren van historische logs, niet per se om direct live verkeer te blokkeren.
Waarom patchen alleen niet genoeg is
Omdat de TED-backdoor HAProxy draait op het vervangen van een bestaande HAProxy-binary, lost een standaard “update naar de laatste versie” het probleem niet automatisch op. Upgraden verwijdert volgens Rapid7 de implant immers niet, zolang de aanvaller al een vervangende binary heeft neergezet.
Bovendien lijken de binaries op versie- en build-string-niveau te kunnen lijken op een schone build. Rapid7 meldt dat een gecompileerde versie dezelfde versie-string kan behouden. Dat maakt “controleer alleen versie” onvoldoende.
Wat wél wordt aanbevolen door Rapid7 zijn onder meer:
- onafhankelijke correlatie van netwerkdata (niet alleen HAProxy-statistieken)
- analyse van geheugengedrag
- checks op binary-integriteit
Context: dezelfde modus van misbruik blijft terugkomen
Rapid7 plaatst deze campagne in bredere context van watering-hole en state-sponsored operaties. In juli beschreven AhnLab en ENKI WhiteHat een vergelijkbare campagne waarin gecompromitteerde Koreaanse websites werden misbruikt om te richten op een signing client (AnySign4PC). Ook hier draait het conceptueel om het combineren van gerichte delivery met een keten van technische controlemaatregelen.
Voor organisaties betekent dat: naast hardening en patching moet je ook kijken naar detectie die niet afhankelijk is van één product- of kwetsbaarheidsindicator.
Praktische aanbevelingen voor defenders
Als je HAProxy inzet (zeker in internet-facing scenario’s), helpt het om je verdedigingsstrategie te verbreden van “kwetsbaarheidspatch” naar “integriteit en afwijkend gedrag”. Denk aan de volgende acties:
- Controleer de integriteit van HAProxy-binaries: niet alleen bestandsbestaan, maar ook of het overeenkomt met je eigen build-/distributieproces.
- Correlatie buiten HAProxy: kijk naar verkeerspatronen, response-gedrag en afwijkingen in content (bijvoorbeeld requests die alleen voor specifieke combinaties van headers lijken te werken).
- Logboekanalyse met extra aandacht voor ontbrekende of “gecorrigeerde” statistieken: als connection counters niet kloppen, is dat een signaal.
- Onderzoek host-sporen: auditsporen, cron-gerelateerde wijzigingen, en aanwezigheid van verdachte paden onder /tmp of vaste opslaglocaties.
Daarmee maak je het lastiger voor een TED-backdoor HAProxy om zich te verbergen door manipulatie van logica, headers en meetwaarden.
Conclusie
De ontdekking rond de TED-backdoor HAProxy laat zien hoe geavanceerde aanvallen niet per se leunen op “een bug in het product”, maar op het vervangen van binaries en het gericht manipuleren van webverkeer. De implant kan C2-achtige communicatie laten lijken op normaal HTTP-verkeer, en alleen geselecteerde bezoekers een gemodificeerde pagina geven.
Voor organisaties is de kernboodschap helder: kijk verder dan patchen. Richt je op integriteit van software, onafhankelijke netwerkcorrelatie en grondige hostanalyse. Zo verklein je de kans dat een trojanized load balancer ongemerkt blijft functioneren.
Gerelateerd: lees ook hoe organisaties supply chain risico blokkeren in webservers via het toepassen van detectie- en integriteitsmaatregelen: supply chain risico blokkeren in webservers.
Bron: https://thehackernews.com/2026/09/new-ted-backdoor-hides-inside-victims.html
