image

FBI roept softwareontwikkelaars op einde aan command injection te maken

donderdag 11 juli 2024, 10:07 door Redactie, 14 reacties

De FBI en het Amerikaanse Cybersecurity and Infrastructure Security Agency (CISA) hebben softwareontwikkelaars opgeroepen om een einde aan command injection in hun producten te maken. Volgens de overheidsdiensten is command injection een te voorkomen klasse van kwetsbaarheden, maar komt het probleem in de praktijk nog steeds voor. De FBI en CISA hebben de oproep gepubliceerd in reactie op actief misbruik van command injection-kwetsbaarheden in netwerkapparatuur van Cisco, Palo Alto Networks en Ivanti.

Command injection-kwetsbaarheden doen zich voor als softwareleveranciers en fabrikanten gebruikersinvoer niet goed valideren en sanitizen, waardoor gebruikers commando's op het onderliggende besturingssysteem kunnen uitvoeren. "Het ontwerpen en ontwikkelen van software die zonder goede validatie en sanitization gebruikersinvoer vertrouwt maakt het mogelijk voor aanvallers om malafide commando's uit te voeren, waardoor consumenten risico lopen", aldus de Amerikaanse overheidsdiensten. Die stellen dat deze beveiligingslekken te voorkomen zijn als softwareontwikkelaars en leveranciers een 'secure by design' aanpak hanteren.

De FBI en het CISA roepen software- en techbedrijven op om een plan op te stellen om command injection-kwetsbaarheden in de toekomst te elimineren. Het gaat om het gebruik van functies die commando's op een veiligere manier genereren, gebruik van moderne libraries, uitvoeren van code reviews, herzien van dreigingsmodellen en tijdens de gehele ontwikkellevenscyclus de kwaliteit en veiligheid van de code testen.

Softwareleveranciers en fabrikanten die willen laten zien dat ze 'secure by design' producten maken worden door de FBI en het CISA opgeroepen de 'Secure by Design Pledge' af te leggen. De pledge bevat zeven doelen voor leveranciers om binnen een jaar naartoe te werken. Zo moeten de bedrijven stappen nemen om het gebruik van multifactorauthenticatie (MFA) binnen de eigen producten te vergroten en het gebruik van standaard wachtwoorden te verminderen. Ook geven leveranciers via de plegde aan dat ze zullen proberen om gehele klassen van kwetsbaarheden te verminderen, alsmede het installeren van beveiligingsupdates door klanten te verbeteren.

Eerder kwamen het CISA en de FBI al met oproepen om een eind aan SQL-injection en path traversal te maken. "Dit Secure by Design Alert is onderdeel van een reeks die als doel heeft om industriebrede best practices te bevorderen die gehele klassen van kwetsbaarheden tijdens het ontwerp en ontwikkeling van een product kunnen elimineren. Via het Secure by Design initiatief willen we binnen de industrie een cultuurverandering bevorderen door de ontwikkeling te normaliseren van producten die out of the box veilig te gebruiken zijn", zo stellen de overheidsdiensten.

Reacties (14)
11-07-2024, 10:35 door Anoniem
Nu nog een eed voor software ontwikkelaars, zoals ambtenaren of financiële dienstverleners moeten afleggen.
11-07-2024, 10:37 door Anoniem
Tja. Als softwareontwikkelaars blijkbaar niet competent genoeg zijn om dit uit zichtzelf op te lossen, dan gaat zo'n oproep daar echt niet bij helpen. Kennis en competentie verkrijg je namelijk niet uit een oproep.
11-07-2024, 11:53 door Anoniem
Mijn vorige werkgever zei dat altijd; gewoon geen bugs schrijven!
11-07-2024, 12:12 door Anoniem
Door Anoniem: Mijn vorige werkgever zei dat altijd; gewoon geen bugs schrijven!
LOL.

Dat is inderdaad de oplossing gewoon geen bugs en kwetsbaarheden in je code schrijven en daar dan een eed op afleggen.

BTW, zullen we dan ook alle leveranciers van auto's een eed laten afleggen dat je auto nooit kapot zal gaan. En alle fabrikanten van sloten laten zweren dat er geen inbreker ooit het slot zal kraken :-)
11-07-2024, 12:48 door Anoniem
<quote>zonder goede validatie en sanitization</quote>

Als programmeur heb ik een kanttekening:

Command-injection, SQL-injection, HTML-injection zijn 3 keer hetzelfde probleem. Het probleem is dat de data niet correct wordt ge-encodeerd naar het *uitvoerformaat*.

En dat zul je voor elk uitvoerformaat apart moeten doen volgens de regels van dat formaat.

De regels voor SQL-encoding zijn de afgelopen 50 jaar niet veranderd: Voor elke: ' (single quote) in de data, schrijf er twee: '' (twee single quotes) in de query. De database zoekt naar de user [[ '); DELETE from users; ]] en komt terug met een lege lijst. En daarmee is het gevaar verdwenen, ook zonder input validatie.

Oproep aan alle pentesters: schrijf in jullie rapport niet over invoervalidatie of 'gevaarlijke characters' maar gebrekkige uitvoer-encoding.
11-07-2024, 15:43 door Anoniem
Ik ga meteen aan de slag!
11-07-2024, 15:59 door Anoniem
In de ideale wereld zou altijd secure by design toegepast moeten worden. Maar ja, vaak is tijdsdruk & geldgebrek (lees geen prioriteit aan security geven) de boosdoener, bij veel bedrijven. Als regeringen nou ook eens wat meer zouden investeren in security & software-bedrijven zouden doorlichten op security & die dan een goedkeuringslabel/certificaat, oid zouden geven, dan heb je al aardig wat winst lijkt mij. En ja, je hebt nu ISO-certificeringen, maar daarvoor ben je afhankelijk van commerciëlen en daardoor is die certificering niet altijd accuraat (lees, daarmee kan gerommeld worden, vanuit commerciële overwegingen).
11-07-2024, 17:44 door Anoniem
Door Anoniem: <quote>zonder goede validatie en sanitization</quote>

Als programmeur heb ik een kanttekening:

Command-injection, SQL-injection, HTML-injection zijn 3 keer hetzelfde probleem. Het probleem is dat de data niet correct wordt ge-encodeerd naar het *uitvoerformaat*.

En dat zul je voor elk uitvoerformaat apart moeten doen volgens de regels van dat formaat.

De regels voor SQL-encoding zijn de afgelopen 50 jaar niet veranderd: Voor elke: ' (single quote) in de data, schrijf er twee: '' (twee single quotes) in de query. De database zoekt naar de user [[ '); DELETE from users; ]] en komt terug met een lege lijst. En daarmee is het gevaar verdwenen, ook zonder input validatie.

Oproep aan alle pentesters: schrijf in jullie rapport niet over invoervalidatie of 'gevaarlijke characters' maar gebrekkige uitvoer-encoding.

Daarom zou er een eed moeten komen
11-07-2024, 19:57 door karma4
Als je commando's kan uitvoeren onder met hoge privileges dan is dat niet zo handig.
De programmeur gebruiker vindt het wel handig omdat hij dan geen last van allerlei wonderlijke beperkingen heeft.

De bewering dat programmeurs code injection wel kunnen oplossen klopt niet.

Het zo zo moeten zijn dat enkel de rechten van de actieve gebruiken met een een eventueel privileged account zo zijn ingesteld dat er geen overbodige rechten tot wat dan ook als informatie zijn. In dat geval maakt hoe je daarbij komt via een api of onbedoeld commando niets uit. Het begint dat er veel te ruime rechten ingesteld worden als gangbare cultuur. (root)
11-07-2024, 20:58 door Anoniem
Door Anoniem: <quote>zonder goede validatie en sanitization</quote>

Als programmeur heb ik een kanttekening:

Command-injection, SQL-injection, HTML-injection zijn 3 keer hetzelfde probleem. Het probleem is dat de data niet correct wordt ge-encodeerd naar het *uitvoerformaat*.

En dat zul je voor elk uitvoerformaat apart moeten doen volgens de regels van dat formaat.

De regels voor SQL-encoding zijn de afgelopen 50 jaar niet veranderd: Voor elke: ' (single quote) in de data, schrijf er twee: '' (twee single quotes) in de query. De database zoekt naar de user [[ '); DELETE from users; ]] en komt terug met een lege lijst. En daarmee is het gevaar verdwenen, ook zonder input validatie.

Oproep aan alle pentesters: schrijf in jullie rapport niet over invoervalidatie of 'gevaarlijke characters' maar gebrekkige uitvoer-encoding.

Waarom zou ik een query uit laten voeren als ik input met vervelende symbolen vooraf al kan filteren en ik mezelf een query bespaar (en dus performance win, geen onnodige logfile vervuiling over me afroep, side effects per ongeluk toch mogelijk maak etc)?
13-07-2024, 00:01 door Anoniem
<quote>input met vervelende symbolen</quote>

De wereld bevat namen met 'vervelende symbolen'. Denk aan 'modezaak C&A'. Of de meme <3. Je kunt ze niet uitfilteren omdat daarmee de betekenis verloren gaat.

Je kunt ze ook niet 'sanitizen' aan de invoerkant. C&A wordt dan C&amp;A. Je kunt deze gesanitizede waarde *alleen* nog maar gebruiken om in een HTML-pagina te plaatsen, of in een URL-parameter. Als je het in een database stopt gaat het mis. Want de zaak heet nog steeds C&A, niet C&amp;A. En de & is geen vervelend symbool in SQL.

En wat als je die C&A niet alleen op een pagina wilt plaatsen, maar ook in een shell-process meegeven, dan is zowel C&A als C&amp;A vervelend want die & betekent in Linux: 'einde van deze commando-regel, en in de achtergrond draaien.

Daarom mijn oproep voor uitvoer-encoding. Dat gaat altijd goed.

En als een hacker een poging doet, wil je dat als onnodige vervuiling weggepoetst hebben zodat je het niet ziet, of wil je het loggen en er met fail2ban op reageren en dat IP-adress blokkeren?
13-07-2024, 09:54 door Anoniem
Door Anoniem:
Door Anoniem: <quote>zonder goede validatie en sanitization</quote>

Als programmeur heb ik een kanttekening:
Command-injection, SQL-injection, HTML-injection zijn 3 keer hetzelfde probleem. Het probleem is dat de data niet correct wordt ge-encodeerd naar het *uitvoerformaat*.
En dat zul je voor elk uitvoerformaat apart moeten doen volgens de regels van dat formaat.
...snip
Oproep aan alle pentesters: schrijf in jullie rapport niet over invoervalidatie of 'gevaarlijke characters' maar gebrekkige uitvoer-encoding.

Waarom zou ik een query uit laten voeren als ik input met vervelende symbolen vooraf al kan filteren en ik mezelf een query bespaar (en dus performance win, geen onnodige logfile vervuiling over me afroep, side effects per ongeluk toch mogelijk maak etc)?

exact, input validation en sanitation en iets dergelijks als prepared statements. Die invoervelden hoeven niks anders te bevatten dan wat er nodig is.
i.c.m. met code die ervoor zorgt dat de backend (de database server) geen extra commando's gaat uitvoeren, met alleen de queries die van te voren bepaald zijn voor die funtie.

Kijk naar de breach van AT&T:
https://www.security.nl/posting/849649/Telecomgigant+AT%26T+lekt+telefoongegevens+van+%27bijna+alle%27+klanten

Komt ook door oncapable programmeurs die alleen op functionaliteit bouwen en het niet afdichten.
En het erge is... Op school leert men dat ook nog maar zelden.
13-07-2024, 10:26 door Anoniem
Door Anoniem: <quote>zonder goede validatie en sanitization</quote>

...

Oproep aan alle pentesters: schrijf in jullie rapport niet over invoervalidatie of 'gevaarlijke characters' maar gebrekkige uitvoer-encoding.
Ik vind het in deze context best grappig dat jij de quote-tag met <> eromheen schreef in plaats van met [], en kennelijk niet de preview-functie hebt gebruikt om even te valideren of je het wel goed deed.

Het is in mijn ogen vaak precies dit soort haastige slordigheid die dingen fout doet gaan. En werkgevers die druk uitoefenen om dingen zo snel en goedkoop mogelijk te doen werken dat natuurlijk sterk in de hand, en dan gaan zelfs de beste mensen fouten maken die ze met wat meer ruimte voor zorgvuldigheid niet hadden gemaakt.
13-07-2024, 20:11 door Anoniem
Door Anoniem: En als een hacker een poging doet, wil je dat als onnodige vervuiling weggepoetst hebben zodat je het niet ziet, of wil je het loggen en er met fail2ban op reageren en dat IP-adress blokkeren?

Wat ik zeker niet wil is dat die query mijn netwerk in komt. Dat is hetzelfde als zeggen "laat dat virus maar door, want we hebben antivirus software op alle servers draaien, dus de backend vangt het wel af". Je blokkeert (potentieel) ongewenst gedrag in een zo vroeg mogelijk stadium. En dat is dus niet aan de backend op een database. Dat is security-technisch echt zó fout, zeker bij onvertrouwde queries van onvertrouwde partijen.

Dat ik context verlies is zelden van toepassing. Je maakt prepared statements en filtert alle andere onzin. Daar kun je je applicatie prima op inrichten.
Reageren
Ondersteunde bbcodes
Bold: [b]bold text[/b]
Italic: [i]italic text[/i]
Underline: [u]underlined text[/u]
Quote: [quote]quoted text[/quote]
URL: [url]https://www.security.nl[/url]
Config: [config]config text[/config]
Code: [code]code text[/code]

Je bent niet en reageert "Anoniem". Dit betekent dat Security.NL geen accountgegevens (e-mailadres en alias) opslaat voor deze reactie. Je reactie wordt niet direct geplaatst maar eerst gemodereerd. Als je nog geen account hebt kun je hier direct een account aanmaken. Wanneer je Anoniem reageert moet je altijd een captchacode opgeven.