{"id":"CVE-2026-65820","kind":"vulnerability","aliases":["CVE-2026-65820"],"related":[],"title":"aeon: GitHub Actions workflow runs fork pull request code with write token","description":"aeon is a scikit-learn compatible Python library for learning from time series. Prior to version 1.5.0, a GitHub Actions workflow used pull_request_target for pre-commit checks on pull requests from forks. In this configuration, fork-controlled code could be checked out and executed in a privileged context. The vulnerable workflow also generated/used elevated credentials and could automatically commit or push fixes back to pull request branches. This created a potential token exposure and repository write path if an attacker submitted a malicious fork pull request designed to execute during the privileged workflow run. This issue has been patched in version 1.5.0.","summary":"The aeon Python library's pre-commit GitHub Actions workflow ran code from forked pull requests in a privileged context. A malicious fork pull request could expose elevated credentials and push commits to the repository.","severity":"high","cvss":8.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["aeon","github-actions","package","python"],"not_affected_if":["library-only-use","version-1.5.0-or-later"],"how_to_check":"- Check the version of aeon in your dependencies, for example `pip show aeon`\n- Look for a `.github/workflows` file in the aeon repository that uses `pull_request_target` for pre-commit checks, if you maintain a fork or copy of the project","fix":"- aeon: upgrade to `1.5.0` or later","status":"open","published_at":"2026-11-11T18:19:47+00:00","first_seen_at":"2026-11-11T18:28:43+00:00","triaged_at":"2026-11-11T18:29:20+00:00","updated_at":"2026-11-11T18:29:20+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-11T18:29:20Z","model":"claude-haiku-5-5","output":{"fix":"- aeon: upgrade to `1.5.0` or later","reach":"internet","title":"aeon: GitHub Actions workflow runs fork pull request code with write token","impact":"high","summary":"The aeon Python library's pre-commit GitHub Actions workflow ran code from forked pull requests in a privileged context. A malicious fork pull request could expose elevated credentials and push commits to the repository.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","github-actions","aeon"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"Attacker reads elevated tokens and writes to the repository","analyst_note":"","how_to_check":"- Check the version of aeon in your dependencies, for example `pip show aeon`\n- Look for a `.github/workflows` file in the aeon repository that uses `pull_request_target` for pre-commit checks, if you maintain a fork or copy of the project","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["library-only-use","version-1.5.0-or-later"],"who_is_affected":"The flaw is in aeon's own CI workflow, not in the library code that applications import, so exposure is limited to people who run that workflow or a fork of the repository with the vulnerable configuration. Teams that only install aeon from PyPI are not exposed through this workflow. Teams that copied the workflow into their own repositories should check it.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.00073,"input_tokens":4667,"output_tokens":526,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,17A '-65820':15A,18A '1.5.0':78C,167C 'action':3A,22B,34B,81C 'aeon':1A,19B,26B,61C 'also':117C 'attack':145C 'automat':123C 'back':128C 'branch':132C 'check':91C,106C 'code':9A,37B,103C 'commit':32B,57B,90C,124C 'compat':67C 'configur':99C 'context':45B,113C 'control':102C 'could':51B,104C,122C 'creat':134C 'credenti':54B,120C 'cve':13A,16A 'design':152C 'elev':53B,119C 'execut':109C,154C 'expos':52B 'exposur':138C 'fix':127C 'fork':6A,39B,48B,96C,101C,149C 'fork-control':100C 'generated/used':118C 'github':2A,21B,33B,80C 'github-act':20B 'issu':161C 'learn':66C,71C 'librari':28B,69C 'malici':47B,148C 'packag':23B 'patch':164C 'path':142C 'potenti':136C 'pre':31B,89C 'pre-commit':30B,88C 'prior':75C 'privileg':44B,112C,157C 'pull':7A,40B,49B,84C,93C,130C,150C 'push':56B,126C 'python':24B,27B,68C 'ran':36B 'repositori':60B,140C 'request':8A,41B,50B,85C,94C,131C,151C 'run':5A,159C 'scikit':65C 'scikit-learn':64C 'seri':74C 'submit':146C 'target':86C 'time':73C 'token':12A,137C 'use':83C 'version':77C,166C 'vulner':115C 'workflow':4A,35B,82C,116C,158C 'write':11A,141C","nicknames":[],"mitigations":[],"who_affected":"The flaw is in aeon's own CI workflow, not in the library code that applications import, so exposure is limited to people who run that workflow or a fork of the repository with the vulnerable configuration. Teams that only install aeon from PyPI are not exposed through this workflow. Teams that copied the workflow into their own repositories should check it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["aeon","githubactions","high","package","python"],"campaign_type":null,"search_a":"'-2026':14A,17A '-65820':15A,18A 'action':3A 'aeon':1A 'code':9A 'cve':13A,16A 'fork':6A 'github':2A 'pull':7A 'request':8A 'run':5A 'token':12A 'workflow':4A 'write':11A","search_b":"'action':22B,34B 'aeon':19B,26B 'code':37B 'commit':32B,57B 'context':45B 'could':51B 'credenti':54B 'elev':53B 'expos':52B 'fork':39B,48B 'github':21B,33B 'github-act':20B 'librari':28B 'malici':47B 'packag':23B 'pre':31B 'pre-commit':30B 'privileg':44B 'pull':40B,49B 'push':56B 'python':24B,27B 'ran':36B 'repositori':60B 'request':41B,50B 'workflow':35B","search_c":"'1.5.0':78C,167C 'action':81C 'aeon':61C 'also':117C 'attack':145C 'automat':123C 'back':128C 'branch':132C 'check':91C,106C 'code':103C 'commit':90C,124C 'compat':67C 'configur':99C 'context':113C 'control':102C 'could':104C,122C 'creat':134C 'credenti':120C 'design':152C 'elev':119C 'execut':109C,154C 'exposur':138C 'fix':127C 'fork':96C,101C,149C 'fork-control':100C 'generated/used':118C 'github':80C 'issu':161C 'learn':66C,71C 'librari':69C 'malici':148C 'patch':164C 'path':142C 'potenti':136C 'pre':89C 'pre-commit':88C 'prior':75C 'privileg':112C,157C 'pull':84C,93C,130C,150C 'push':126C 'python':68C 'repositori':140C 'request':85C,94C,131C,151C 'run':159C 'scikit':65C 'scikit-learn':64C 'seri':74C 'submit':146C 'target':86C 'time':73C 'token':137C 'use':83C 'version':77C,166C 'vulner':115C 'workflow':82C,116C,158C 'write':141C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-07-03T09:12:33+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-65820","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-65820","severity":null,"published_at":"2026-11-11T18:19:47+00:00","modified_at":"2026-11-11T18:19:47+00:00","first_seen_at":"2026-11-11T18:28:43+00:00","fetched_at":"2026-11-11T18:28:43+00:00","note":null}],"documents":[{"id":127747,"url":"https://github.com/aeon-toolkit/aeon/commit/99261e1355c89a316bf0824bb03f855c6aadae8f","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":127748,"url":"https://github.com/aeon-toolkit/aeon/security/advisories/GHSA-mhg2-mc45-wrjr","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-07-03T09:12:33+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}