Security van het populaire Python, is dit wel veilig genoeg?

Security van het populaire Python, is dit wel veilig genoeg?

Redactie WINMAG Pro
Vandaag de dag staat 43% van alle datalekken rechtstreeks in verband met kwetsbaarheden in applicaties. Nu de programmeertaal Python steeds populairder wordt bij ontwikkelaars, heeft Snyk de securityproblemen met betrekking tot de taal grondig onderzocht.

Ze hebben vastgesteld dat terwijl 81% van de meest populaire Python-pakketten zich in een gezonde staat bevinden, ongeveer 20% van de door Snyk Code geïdentificeerde zwakheden in security gerelateerd zijn aan Python-projecten.

De programmeertaal Python is steeds populairder geworden, mede dankzij het ecosysteem van machine-learning softwarebibliotheken zoals NumPy, Pandas, Google's TensorFlow en Facebook's PyTorch. Volgens de TIOBE Index is Python nu de meest populaire programmeertaal ter wereld, die zowel Java als C overtreft.

Toen Snyk de bedreigingen en kwetsbaarheden met betrekking tot Python bekeek, ontdekte het dat "elke maand gemiddeld 60 nieuwe Python-kwetsbaarheden worden toegevoegd aan de kwetsbaarheidsdatabase van Snyk", waarvan bijna een derde wordt geclassificeerd als kritiek of zeer ernstig (5% is problemen met kritieke ernst, 27% is van hoge ernst, 56% is van gemiddelde ernst en 12% is van lage ernst). Gelukkig bleek ook dat de meeste gevonden kwetsbaarheden snel verholpen konden worden. Ongeveer 87% van de kwetsbaarheden kan namelijk worden voorkomen door over te stappen op bijgewerkte pakketten. Tegelijkertijd kunnen de meeste kwetsbaarheden in containers worden gesloten door kleinere pakketten te gebruiken.

Deze herstelmaatregelen zijn in veel projecten nodig. In meer dan 60% van de Python-projecten zijn code-gerelateerde elementen van de OWASP Top 10 2021-lijst met problemen te vinden. Dit soort problemen kan ertoe leiden dat aanvallers client-side scripts in websites (XSS) injecteren, SQL injectie-aanvallen kunnen ontstaan door het maken van SQL-query’s door de gebruiker geleverde strings, en certificaatverificatie soms is uitgeschakeld, waardoor man-in- the-middle-aanvallen mogelijk gemaakt worden.

"Als we kijken naar enkele van de securityproblemen die worden aangetroffen in Python-projecten zijn problemen met betrekking tot interacties met externe bronnen, zoals bestands- of netwerkstreams, slechts een klein onderdeel van alle soorten die regelmatig worden geïdentificeerd", zegt Daniel Berman, Product Marketing Director bij Snyk. "Python-ontwikkelaars lijken iets minder gedisciplineerd in het aanroepen van de close-functies om de inhoud van het systeem te spoelen en zo eventuele handvatten vrij te maken."

Afhankelijkheden vergroten het aanvalsoppervlak

Een ander aandachtspunt is de inhoud van een typische Python-repository, die tegenwoordig uit veel meer bestaat dan alleen de Python-code die door de ontwikkelaar is geschreven. Veelgebruikte elementen zijn open source-pakketten en containerafbeeldingen, evenals configuratiebestanden die worden gebruikt voor het inrichten van de infrastructuur die nodig is om ze uit te voeren. Vanuit securityperspectief betekent dit dat het aanvalsoppervlak van projecten in de loop van de tijd groter wordt.

Snyk ontdekte dat een gemiddeld Python-project ongeveer 35 afhankelijkheden heeft. Hiervan zijn er 17 directe afhankelijkheden en 18 indirecte afhankelijkheden. In 47% van deze projecten introduceren de afhankelijkheden kwetsbaarheden. Een gemiddeld kwetsbaar project bestaat uit 33 bekende kwetsbaarheden, waarvan 10% kritieke kwetsbaarheden, 26% hoge ernst, 26% gemiddelde ernst en 28% lage ernst.

"Naarmate applicaties complexer worden, wordt de securitytaak ook groter", zegt Daniel Berman. "Kwaadwillende actoren hebben een breed scala aan aanvalsvectoren om te gebruiken bij het aanvallen van een Python-app, of het nu gaat om bekende kwetsbaarheden die zijn geïntroduceerd via directe of indirecte afhankelijkheden, securitygebruik in de eigen code van de app of kwetsbaarheden in containers."

Op basis van de belangrijkste securityproblemen heeft Snyk zes algemene adviespunten ontwikkeld voor Python-ontwikkelaars:

  1. Gebruik moderne statische code-analyse: Linters zoals Pylint en scanners zoals Bandit zijn een goed begin. De vervelende problemen zijn hier echter interfile (d.w.z. de problemen treden op als de uitvoering van de toepassing tussen verschillende bronbestanden stroomt). Het is bijna onmogelijk om dit soort problemen handmatig te vinden.
  2. Opschonen van gegevens: probeer binnenkomende gegevens van externe bronnen (inclusief databases) op het toegangspunt in de toepassing op te schonen.
  3. ORM: gebruik moderne ORM-tools (Object Relational Mapping) om database-interacties te abstraheren en SQL-injectiemogelijkheden te voorkomen. Als je pakketten zoals Django of Flask gebruikt, gebruik dan bibliotheken zoals Django ORM of SQLAlchemy die goed zijn doorgelicht.
  4. Unicode: standaardiseer indien mogelijk alle strings naar een enkele Unicode-codering - we raden UTF-8 aan. Wees voorzichtig bij het converteren van Unicode-strings naar ASCII.
  5. Sluit API's: zorg ervoor dat jouw netwerkverbindingen zijn gesloten (bijv. externe lees- en schrijfbewerkingen). Dit zorgt ervoor dat gegevens die in hun buffers zijn geschreven, daadwerkelijk worden opgeslagen, de status correct wordt opgeslagen en dat er handvatten in jouw systeem vrijkomen.
  6. Bewaak je geheimen: dit is niet specifiek voor Python, maar het is gebruikelijk om geheimen zoals gebruikersnamen, wachtwoorden, API-toegangstokens en ook bestandspaden of bestandsnamen in de broncode te zien lekken. Het is een goede gewoonte om ze in aparte bestanden te bewaren, of beter nog, geheime opslagplaatsen zoals HashiCorp Vault, AWS Key Management Service, enz.

Ga voor meer informatie naar https://snyk.io/

Redactie WINMAG Pro
Door: Redactie WINMAG Pro
Redactie

Redactie WINMAG Pro

Redactie