{"id":111737,"date":"2023-11-24T21:10:15","date_gmt":"2023-11-24T19:10:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov"},"modified":"2023-11-24T21:10:15","modified_gmt":"2023-11-24T19:10:15","slug":"v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/news\/v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov","title":{"rendered":"Around 5000 secrets left in the code and 8 malicious obfuscators have been identified in the PyPI repository.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>GitGuardian researchers have published the results of an analysis of confidential data forgotten by developers in code stored in the Python package repository PyPI (Python Package Index). After examining over 9.5 million files and 5 million package releases associated with 450,000 projects, 56,866 instances of confidential data leaks were identified. If considering only unique data, without duplication across releases, the number of identified leaks amounted to 3,938, with 2,922 projects containing at least one leak.      <\/p>\n<p>A total of more than 150 types of sensitive information leaks have been identified, including common passwords, cryptographic keys, access tokens to cloud services, continuous integration systems, and APIs. At least 768 credentials were still active at the time of the study. Examples of popular leaks that remain relevant include access keys to Azure Active Directory, SSH credentials, MongoDB, MySQL, and PostgreSQL credentials, keys to GitHub OAuth Apps, Dropbox, and Auth0, as well as login parameters for Coinbase and Twilio.      <\/p>\n<p>Among the increasingly popular types of leaks are access tokens for Telegram bots, the number of which doubled in early 2021 and then doubled again in spring 2023. A steady increase in leaks has also been recorded since 2020 for Google API access keys, and since 2022 for database credentials. Among the packages leading in the number of leaks are chatllm and safire, which had 209 keys for OpenAI and 320 keys for Google Cloud forgotten respectively.        <\/p>\n<p>Among the file types where the highest number of leaks have been discovered, in addition to files with the .py extension, are .json (610 leaks), .md (270), PKG-INFO (240), METADATA (210), .txt (170), as well as README files (209) and files from directories named test (675). Many leaks are also associated with oversights and errors in excluding files when packaging. For example, files with local configuration files (.cookiecutterrc, .env, .pypirc, etc.) can be excluded from a Git repository via a .gitignore file, which is not considered when creating the package. In particular, 43 .pypirc files containing credentials for accessing PyPI were found in the repository. In 15 cases of leaks, developers did not intend to publicly publish packages initially created for internal use, but mistakenly published them to PyPI.    <\/p>\n<p>Additionally, two more events related to PyPI can be mentioned:  <\/p>\n<ul>\n<li class=\"l\"> Eight malicious packages have been identified in the PyPI repository, presented as utilities for obfuscation, i.e., making the code unreadable and complicating the recovery of the working algorithm. The identified packages contained the string 'pyobf' in their names (Pyobftoexe, Pyobfusfile, Pyobfexecute, Pyobfpremium, Pyobflight, Pyobfadvance, Pyobfuse, and pyobfgood) and were downloaded more than 2,000 times.\n<p>The integrated malicious code was specific to the Windows platform and allowed connections to an external controller <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/dts-shicago\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2914\">server<\/a>, executing arbitrary commands on the developer's computer, finding and sending confidential information, such as access keys, to an external server, as well as transferring arbitrary files from the system. Additionally, the malicious code could function as a keylogger, intercepting passwords typed into Chrome, taking screenshots, recording audio, and even controlling the webcam.          <\/p>\n<li class=\"l\"> The results of an independent audit of the codebase of the tools used for organizing the operation of the pypi.org repository and the 'cabotage' framework involved in the container orchestration infrastructure have been published. The audit was conducted with the support of the non-profit organization OTF (Open Technology Fund). No high-risk issues were identified during the audit, and the source code was deemed compliant with the fundamental requirements for safe coding practices. However, a lack of test coverage for the cabotage codebase was noted, revealing 29 issues, of which eight were assigned a moderate risk level, six a low risk level, and 14 were marked as informational comments.\n<p>The most notable issues were:  <\/p>\n<ul>\n<li class=\"l\"> Insufficient verification of digital signatures used for PyPI integration with AWS SNS allowed notifications to be sent to the email of individual users.\n<li class=\"l\"> Information leakage in the upload handler that allowed the existence of an account to be determined without generating login attempt events.\n<li class=\"l\"> Use of unreliable cryptographic hashes that do not prevent cache poisoning attacks.\n<li class=\"l\"> With build process execution rights through cabotage, an attacker could potentially substitute their own commands.\n<li class=\"l\"> With deployment rights in cabotage, an attacker could potentially deploy a legitimately looking image.  <\/ul>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=60169\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 GitGuardian \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430\u0431\u044b\u0442\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0432 \u043a\u043e\u0434\u0435, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u043e\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Python-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 PyPI (Python Package Index). \u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 9.5 \u043c\u043b\u043d \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 5 \u043c\u043b\u043d \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 450 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e 56866 \u0444\u0430\u043a\u0442\u043e\u0432 \u0443\u0442\u0435\u0447\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0435\u0437 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u0430\u0445, \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0442\u0435\u0447\u0435\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-111737","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 GitGuardian \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430\u0431\u044b\u0442\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0432 \u043a\u043e\u0434\u0435, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u043e\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Python-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 PyPI (Python Package Index).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/news\/v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 PyPI \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e \u043e\u043a\u043e\u043b\u043e 5000 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0438 8 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0445 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 GitGuardian \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430\u0431\u044b\u0442\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0432 \u043a\u043e\u0434\u0435, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u043e\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Python-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 PyPI (Python Package Index).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/news\/v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2023-11-24T19:10:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2023-11-24T19:10:15+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Around 5000 secrets left in the code and 8 malicious obfuscators found in the PyPI repository | ProHoster","description":"GitGuardian researchers have published the results of an analysis of sensitive data left behind by developers in code hosted in the Python package repository PyPI (Python Package Index).","canonical_url":"https:\/\/prohoster.info\/en\/blog\/news\/v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 PyPI \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e \u043e\u043a\u043e\u043b\u043e 5000 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0438 8 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0445 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\u043e\u0432 | ProHoster","og:description":"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 GitGuardian \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430\u0431\u044b\u0442\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0432 \u043a\u043e\u0434\u0435, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u043e\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Python-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 PyPI (Python Package Index).","og:url":"https:\/\/prohoster.info\/en\/blog\/news\/v-repozitorii-pypi-vyyavleno-okolo-5000-ostavlennyh-v-kode-sekretov-i-8-vredonosnyh-obfuskatorov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2023-11-24T19:10:15+00:00","article:modified_time":"2023-11-24T19:10:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"111737","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-02-09 21:42:03","updated":"2026-02-09 21:42:03","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/111737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=111737"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/111737\/revisions"}],"predecessor-version":[{"id":160194,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/111737\/revisions\/160194"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=111737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=111737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=111737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}