Commit Graph

534 Commits

Author SHA1 Message Date
TPTBusiness 7b2f54ff9a fix(auto-fixer): add four new factor code fixes for common runtime errors
- _fix_reset_index_groupby: replace groupby(level=N) on reset_index'd variables
  with groupby('instrument') — fixes ValueError: level > 0 only valid with MultiIndex
- _fix_groupby_mixed_levels: strip string level names from groupby(level=[int, 'str'])
  to fix AssertionError: Level 'date' not in index
- _fix_groupby_column_on_multiindex: convert groupby(['instrument','date']) on
  MultiIndex DataFrames to groupby(level=1) — fixes KeyError on column access
- _fix_rolling_ddof: remove unsupported ddof kwarg from rolling().std()/var()
- fix(proposal): apply history compression to factor_proposal.py (was causing
  131k-token prompts from QlibFactorHypothesis2Experiment; pycache had stale .pyc)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:51:59 +02:00
TPTBusiness d2037a475a fix(loop): compress old experiment history in proposal prompt to reduce context size
- Summarize all but the 2 most recent experiments to compact bullet lines
  (factor name, PASS/FAIL, IC value, 120-char observation snippet) instead
  of including full verbatim traces; reduces prompt from ~121k to ~40-60k tokens
- Fix _evaluate_factor_directly and _save_factor_values to look for result.h5
  and factor.py in sub_workspace_list instead of experiment_workspace
- Fix Series.to_parquet() → Series.to_frame().to_parquet() in _save_factor_values
- Update factor_data_template README: correct bars-per-day (1440, not 96)
- Update prompts to accept 2024-only debug dataset output as valid factor result
- Fix factor_coder prompts: allow 2024 debug data in date-range instruction

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 09:10:39 +02:00
TPTBusiness ef2a6c5ee0 fix(factors): extend look-ahead rules to session factors and add intraday-factor guidance
- Rule 7 extended: session-based aggregations (London/NY/Asian) must also
  be shifted by 1 trading day before use — same as daily aggregations
- Rule 8 added: prefer pure intraday rolling factors (RSI, Bollinger, VWAP
  deviation, rolling std) that have no look-ahead risk and vary every minute
- predix_full_eval.py: apply _shift_daily_constant_factor_if_needed before IC
- predix_gen_strategies_real_bt.py: improved swing prompt with daily-level
  signal logic guidance for daily-constant factors

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 20:19:07 +02:00
TPTBusiness 78fb607dbe fix(factors): detect and correct look-ahead bias in daily-constant factors
Daily factors (e.g. daily_log_return) carried same-day close data at 00:00,
giving the model end-of-day information at bar open — a classic look-ahead bias
that produced spurious IC=0.25 and Sharpe=24 with 98% win rate.

Changes:
- factor_runner.py: add _shift_daily_constant_factor_if_needed() that detects
  factors where >90% of days have a single unique intraday value, then shifts
  them by 1 trading day before IC computation
- prompts.yaml: add rule #7 instructing LLM to always shift(1) daily aggregates
  before forward-filling to minute bars

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 09:34:06 +02:00
TPTBusiness 2a6839e999 fix(security): resolve all 30 Bandit security alerts (B301, B614, B104)
- B301 (pickle): add nosec B301 to pd.read_pickle calls in Kaggle templates
  — files are trusted Kaggle-environment inputs, not user-supplied
- B614 (torch.load): add weights_only=True to all torch.load calls in
  model benchmark GT code and gt_code.py
- B104 (binding 0.0.0.0): change run_server and CLI default to 127.0.0.1;
  add nosec comment where all-interface binding is required for Docker

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 22:24:57 +02:00
TPTBusiness 22e638af86 feat: unified backtest engine, LLM error handling, strategy refactor
- Add vbt_backtest.py as single source of truth for all metric formulas
  (Sharpe, drawdown, IC, transaction costs) — backtest_engine.py and
  strategy_orchestrator.py now delegate to it
- Add LLMUnavailableError to exception.py; rd_loop.py catches it at the
  proposal stage and raises LoopResumeError to avoid corrupting trace
  history with None hypotheses
- Guard record() against None exp/hypothesis so loop resets leave
  trace.hist in a consistent state
- Refactor strategy_orchestrator and optuna_optimizer to use unified
  backtest path; remove duplicate metric calculation code
- Add predix_rebacktest_unified.py script for offline re-evaluation
- Update tests and README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 22:52:07 +02:00
TPTBusiness b9fe985a55 feat(factor-coder): Add critical rules to prevent common factor implementation errors
- Add explicit warning against .date on datetime index (causes data loss
  to single year, only 314 entries instead of 2020-2026)
- Add explicit warning against df.merge() which destroys MultiIndex
  (causes RangeIndex output instead of required MultiIndex)
- Enforce column name must be exactly factor_name, not a shortened alias
- Require transform() over apply() for per-group calculations to
  preserve row count
- Add MultiIndex assertion before saving to result.h5
- Document expected output: ~1500+ daily entries for full 2020-2026 range
2026-04-13 15:28:21 +02:00
TPTBusiness 3cfa3dda6f fix(security): Upgrade vllm and transformers to patch 4 CVEs
- Upgrade vllm >=0.18.0 → >=0.19.0
  - CVE-2026-34753: SSRF in download_bytes_from_url (CVSS 5.3)
  - CVE-2026-34756: OOM DoS via unbounded 'n' parameter (CVSS 6.5)
  - CVE-2026-34755: OOM DoS via unbounded video/jpeg frames (CVSS 6.5)
  - Also includes previous fixes: CVE-2026-22778, CVE-2026-27893

- Upgrade transformers >=4.53.0 → >=5.0.0rc3
  - CVE-2026-1839: RCE via Trainer._load_rng_state (CVSS 7.2)
    - torch.load() without weights_only=True allows arbitrary code execution
  - Also includes previous fixes: CVE-2024-11393, multiple ReDoS, URL validation

File: rdagent/scenarios/rl/autorl_bench/requirements.txt
2026-04-11 21:45:53 +02:00
TPTBusiness 5b022c9c99 fix: Initialize EnvController in QuantTrace.__init__
Problem:
- Many parallel runs crashed with: AttributeError: 'QuantTrace' object has no attribute 'controller'
- controller was only initialized in increment_factor_count(), not in __init__
- Code in quant_proposal.py line 66-67 accesses trace.controller before increment_factor_count() is called

Fix:
- Move self.controller = EnvController() to __init__ method
- controller is now available from the start

Also:
- Removed redundant controller initialization from increment_factor_count()
- This fixes crashes for ~50% of the parallel runs
2026-04-06 12:11:49 +02:00
TPTBusiness ac9bfc6fb4 fix: Add get_factor_count() to QuantTrace to prevent parallel run crashes
Problem:
- All 50 parallel runs failed with: AttributeError: 'QuantTrace' object has no attribute 'get_factor_count'
- The _build_strategies_with_ai() method calls self.trace.get_factor_count()
- This method didn't exist in the QuantTrace class

Fix:
- Add get_factor_count() method to QuantTrace class
- Add increment_factor_count() method to track factor generation
- Call increment_factor_count() in running() step when factors are generated
- _build_strategies_with_ai() is already wrapped in try/except for safety

Now the parallel runs will work correctly.
2026-04-06 10:52:28 +02:00
TPTBusiness a8c23bd130 feat: Add AI Strategy Builder (StrategyCoSTEER) - Closed Source
Open Source Changes:
- Add prompt loader functions for strategy prompts
- Add factor values persistence (parquet) in factor_runner.py
- Add CLI command: predix build-strategies-ai
- Integrate strategy building into QuantRDLoop (every 50 factors)
- Add StrategyBuilder design documentation

Closed Source Files (NOT committed, in local/):
- strategy_coster.py - Main CoSTEER loop for strategies
- strategy_evaluator.py - Walk-forward backtesting
- strategy_runner.py - Strategy execution
- strategy_discovery_v1.yaml - LLM prompts

Usage:
  predix build-strategies-ai              # Build from top 50 factors
  predix build-strategies-ai -t 100       # Use top 100 factors
  predix build-strategies-ai -l 10        # 10 improvement loops

The system:
1. Loads top factors with time-series values
2. LLM generates strategy hypotheses
3. LLM writes strategy code (entry/exit rules)
4. Backtests strategy with walk-forward validation
5. LLM gets feedback and improves
6. Repeats until profitable strategy found
2026-04-05 19:30:12 +02:00
TPTBusiness 6a1c4760c9 fix: Handle Qlib Docker backtest failures gracefully (SECURITY FIX)
- Add _evaluate_factor_directly() to factor_runner.py
- When Qlib Docker returns None, try direct evaluation from result.h5
- Compute IC/Sharpe directly from factor values + forward returns
- Loop continues instead of hanging on Docker failures
- Fix MD5 security warning: usedforsecurity=False in cache_manager.py

Files changed:
- rdagent/scenarios/qlib/developer/factor_runner.py
- rdagent/app/qlib_rd_loop/quant.py
- rdagent/scenarios/qlib/local/cache_manager.py
2026-04-05 09:21:33 +02:00
TPTBusiness 760961d5e7 feat: Add complete ML pipeline with graceful degradation (closed source)
NEW ARCHITECTURE:
┌─────────────────────────────────────────────────┐
│ Phase 1: Factor Generation (Open Source)        │
│ - Generate factors with LLM v3 prompt           │
│ - Backtest each factor in Qlib Docker           │
│ - Save to results/factors/ with code + desc     │
│ - Continue until 5000+ valid factors            │
└─────────────────────────────────────────────────┘
     ↓
┌─────────────────────────────────────────────────┐
│ Phase 2: ML Training (Closed Source - Local)    │
│ - Load top 50 factors                           │
│ - Train LightGBM model                          │
│ - Validate (IC, Sharpe)                         │
│ - Save to results/models/                       │
└─────────────────────────────────────────────────┘
     ↓
┌─────────────────────────────────────────────────┐
│ Phase 3: Portfolio Optimization (Closed Source) │
│ - Select uncorrelated factors (max corr 0.3)    │
│ - Optimize weights by IC                        │
│ - Backtest portfolio                            │
│ - Save to results/portfolios/                   │
└─────────────────────────────────────────────────┘
     ↓
┌─────────────────────────────────────────────────┐
│ Phase 4: Strategy Generation (Closed Source)    │
│ - Generate trading rules                        │
│ - Add risk management                           │
│ - Save to results/strategies/                   │
└─────────────────────────────────────────────────┘
     ↓
┌─────────────────────────────────────────────────┐
│ Phase 5: Iterative Improvement (Closed Source)  │
│ - Use ML results as feedback                    │
│ - Generate better factors                       │
│ - Loop back to Phase 1                          │
└─────────────────────────────────────────────────┘

FILES CREATED (Closed Source - NOT in Git):
- rdagent/scenarios/qlib/local/ml_trainer.py
- rdagent/scenarios/qlib/local/portfolio_optimizer.py
- rdagent/scenarios/qlib/local/quant_loop_advanced.py
- rdagent/scenarios/qlib/local/__init__.py

FILES MODIFIED (Open Source - in Git):
- rdagent/scenarios/qlib/quant_loop_factory.py
- .gitignore (added local/ exclusion)

GRACEFUL DEGRADATION:
- If local/ components don't exist → Standard loop
- If < 5000 factors → Standard loop
- If LightGBM not installed → Falls back
- Open source users get FULLY FUNCTIONAL system

USAGE:
# Standard (always works):
rdagent fin_quant

# Advanced (automatic if local components exist + 5000+ factors):
# Same command - factory auto-selects appropriate loop
2026-04-04 23:09:29 +02:00
TPTBusiness c049742df7 feat: Integrate factor code/description saving into fin_quant process
- Modify factor_runner.py to save factor_code and factor_description
- Add _extract_factor_info() method to extract code from experiment
- Update _save_factor_json() to include code and description
- Now every backtest automatically saves to results/factors/ with:
  * Full factor implementation code
  * Extracted description (docstring or comments)
  * IC, Sharpe, Win Rate, Max Drawdown metrics

This means the normal trading loop (rdagent fin_quant) now automatically
saves complete factor information to results/factors/ - same format as
predix_full_eval.py.
2026-04-04 22:27:14 +02:00
TPTBusiness 25865f9c77 fix: Add missing os import in factor_runner.py
- Fix NameError: name 'os' is not defined
- This caused all 23 parallel runs to fail
- _ensure_results_dirs() uses os functions but import was missing

Tests should still pass
2026-04-04 11:26:39 +02:00
TPTBusiness 68ea969c32 feat: Add parallel run system with API key distribution
- Add predix_parallel.py: Run multiple factor experiments concurrently
  * python predix_parallel.py --runs 5 --api-keys 2 -m openrouter
  * Round-robin API key distribution across available keys
  * Rich live dashboard with per-run status, elapsed time, exit codes
  * Graceful shutdown (Ctrl+C kills all children cleanly)

- Add --run-id parameter to predix.py for isolated single runs
  * Separate log files: fin_quant_run{N}.log
  * Separate results: results/runs/run{N}/
  * Separate workspace: RD-Agent_workspace_run{N}/
  * Separate databases per run

- Modify CoSTEER and FactorRunner for PARALLEL_RUN_ID isolation
  * _save_intermediate_results uses run-specific directories
  * _save_result_to_database and _write_run_log isolated per run
  * _ensure_results_dirs creates run-specific paths

- Reduce max_loop from 10 to 3 for faster iterations
- Add docs/parallel_runs.md with full documentation

Tests: 103 passed
2026-04-04 09:39:12 +02:00
TPTBusiness 7e7e40b041 feat: Fix 1min data integration and centralize all prompts
- Fix daily/1min contradiction in factor_experiment_loader prompts
- Rename daily_pv.h5 to intraday_pv.h5 (generate.py, utils.py, README)
- Fix FactorDatetimeDailyEvaluator to accept 1min bars as correct
- Add _write_run_log() to log every factor attempt to results/logs/
- Add _ensure_results_dirs() to create all result directories
- Extract all 44 prompt YAML files to prompts/ centralized directory
- Add prompts/INDEX.md for navigation

Tests: 93 passed
2026-04-04 08:20:58 +02:00
TPTBusiness 574a9cb75e fix: Resolve 88% empty backtest results + path fixes
Root Cause: Qlib configs used cn_data (Chinese stocks) instead of eurusd
- provider_uri: cn_data → eurusd_1min_data
- market: csi300 → eurusd
- topk: 50 → 1 (single-asset EURUSD, was opening 0 positions)
- n_drop: 5 → 0, limit_threshold: 0.095 → 0.0

Add failed run tracking and validation:
- factor_runner.py: Validate results before DB save, track failed runs
- model_runner.py: Same validation and tracking
- results_db.py: generate_results_summary() → RESULTS_SUMMARY.md
- extract_results.py: Failed run tracking, progress indicators

Fix project root paths in all modules:
- ResultsDatabase: correct path from rdagent/results/ → results/
- factor_runner: db, factors, failed_runs paths
- model_runner: failed_runs path

All 246 tests passing.
2026-04-03 16:21:59 +02:00
TPTBusiness 612ed8a802 fix: Ensure backtest results save to DB and JSON files
- Remove duplicate DB save from quant.py (keep only in factor_runner)
- Add explicit DB path creation with mkdir -p
- Add JSON factor summaries to results/factors/
- Add debug logging for result structure
- Fix logger.debug -> logger.info (RDAgentLog compatibility)
- Update tests to match new architecture (240/240 passing)
- Enhance extract_results.py with progress indicators
2026-04-03 15:46:52 +02:00
TPTBusiness 633b5639de fix: Add nosec comments for schema migration SQL in results_db.py
Bandit false positive B608: Schema migration uses controlled column names,
not user input. Add nosec comments to suppress warning.
2026-04-03 14:37:22 +02:00
TPTBusiness 74d5a8234e feat: Integrate critical features into fin_quant workflow (P0+P1)
Connect Protection Manager, Results Database, model_loader, and Technical
Indicators to the main fin_quant trading loop.

P0 - CRITICAL INTEGRATIONS:

1. PROTECTION MANAGER in factor_runner.py
   - Automatic protection check after every backtest
   - Factors with >15% drawdown are rejected
   - Cooldown, stoploss guard, low performance filters active
   - Error handling: workflow continues if protection fails

2. RESULTS DATABASE in quant.py
   - Auto-save experiment results to SQLite after each loop
   - Stores: IC, Sharpe, Max DD, Annualized Return, Win Rate
   - Queryable via ResultsDatabase API
   - Error handling: warning logged, workflow continues

P1 - IMPORTANT INTEGRATIONS:

3. MODEL LOADER in model_coder.py
   - Loads models/local/ as baseline reference for LLM
   - Transformer, TCN, PatchTST, CNN+LSTM now used as starting point
   - LLM can improve upon existing models instead of from scratch

4. TECHNICAL INDICATORS in factor_coder.py
   - RSI, MACD, Bollinger Bands, CCI, ATR available to LLM
   - Import paths and usage examples in prompts
   - Better factor generation with professional indicators

TESTS (32 new, ALL PASS):
- 23 integration tests in test/qlib/test_fin_quant_integration.py
- 9 enhanced integration tests in test/integration/test_all_features.py
- All 183 tests pass (122 backtesting + 29 qlib + 32 new)

Modified files:
- rdagent/app/qlib_rd_loop/quant.py: Results Database integration
- rdagent/scenarios/qlib/developer/factor_runner.py: Protection Manager
- rdagent/scenarios/qlib/developer/model_coder.py: model_loader baseline
- rdagent/scenarios/qlib/developer/factor_coder.py: Technical indicators
- test/qlib/test_fin_quant_integration.py: NEW - 23 integration tests
- test/integration/test_all_features.py: 9 enhanced tests
2026-04-03 14:10:44 +02:00
TPTBusiness f3a2e2b4f1 fix: Add Bandit security scanning and fix critical vulnerabilities
- Add Bandit security scanner to requirements and pre-commit hooks
- Fix CWE-22 path traversal in tarfile/zipfile extraction (3 files)
  * Add _safe_extract() validation in submit.py, env.py, kaggle_crawler.py
  * Prevents malicious archives from writing outside target directory
- Fix MD5 hashlib calls with usedforsecurity=False flag (2 files)
  * submission_format_test.txt files for checksum validation
- Configure .bandit.yml for automated security scanning
  * Skip known false positives: B602 (subprocess), B701 (Jinja2)
- Add security runbook documentation in docs/security/
- Add pre-commit hook scripts for automated Bandit scanning

All 106 backtesting and security tests pass.
Security issues resolved: B201, B202, B324 (9 total fixes)
2026-04-03 11:55:05 +02:00
TPTBusiness 8e00b89996 fix: Improve path traversal prevention with dedicated helper function
- Add _safe_resolve_path() helper function for path validation
- Centralizes path security logic for reuse across codebase
- Comprehensive validation: null bytes, drive letters, absolute paths, path traversal
- Uses relative_to() check to prevent path traversal attacks
- Refactor resolve_model_path() to use the new helper function

Fixes CodeQL alert #10: Uncontrolled data used in path expression

The new helper function makes the security check more explicit,
which helps CodeQL recognize the path validation.
2026-04-02 23:06:29 +02:00
TPTBusiness 20caf6d264 docs: Translate server.py docstring to English
- Translate resolve_model_path() docstring from Chinese to English
- Add detailed security documentation for path validation steps
- Follows project language policy (English-only documentation)
2026-04-02 23:06:10 +02:00
TPTBusiness 40788b8670 docs: Translate server.py comments to English
- Translate resolve_model_path() docstring from Chinese to English
- Add detailed security validation steps documentation
- Follows project language policy (all comments in English)

No functional changes - documentation only.
2026-04-02 23:06:05 +02:00
TPTBusiness 8c309b8099 chore: Document torch CVE-2025-2953 is already fixed
- Add comment explaining torch >=2.8.0 is already safe (CVE fixed in >=2.7.1)
- Dependabot alert #33 is false positive due to missing lockfile
- No version change needed - current specification is already secure

Security Status:
- CVE-2025-2953: Fixed in torch >=2.7.1, current spec >=2.8.0 ✓
- Affects: torch.mkldnn_max_pool2d function
- Impact: Local DoS via improper resource shutdown
- Attack vector: Local (requires local access)

Note: Without a lockfile (pip-tools/uv/poetry), Dependabot cannot determine
the installed version and raises alerts based on the requirement spec alone.
2026-04-02 23:04:09 +02:00
TPTBusiness 79df01f82a chore: Add CVE-2025-6638 to transformers security notes
- Document CVE-2025-6638 (ReDoS in MarianTokenizer.remove_language_code)
- Already fixed by transformers>=4.53.0 (patched in 4.53.0)
- Dependabot alert is false positive due to missing lockfile

Fixes Dependabot Alert #41
2026-04-02 23:03:18 +02:00
TPTBusiness a53161930e chore: Document transformers CVE-2025-3777 is already fixed
- Add comment explaining transformers >=4.53.0 is already safe (CVE fixed in >=4.52.1)
- Dependabot alert #37 is false positive due to missing lockfile
- No version change needed - current specification is already secure

Security Status:
- CVE-2025-3777: Fixed in transformers >=4.52.1, current spec >=4.53.0 ✓
- Affects: image_utils.py URL validation via startswith() bypass
- Impact: URL username injection allowing malicious domain redirection

Note: Without a lockfile (pip-tools/uv/poetry), Dependabot cannot determine
the installed version and raises alerts based on the requirement spec alone.
2026-04-02 23:03:03 +02:00
TPTBusiness a2d977ff78 chore: Update Flask to fix CVE-2026-27205
- Update flask from >=3.1.0 to >=3.1.3
- Fixes GHSA-68rp-wp8r-4726
- Vary: Cookie header not set when session accessed via 'in' operator
2026-04-02 23:01:10 +02:00
TPTBusiness 5cae7247f0 chore: Document transformers CVE-2025-1194 is already fixed
- Add comment explaining transformers >=4.53.0 is already safe (CVE fixed in >=4.50.0)
- Dependabot alert #31 is false positive due to missing lockfile
- No version change needed - current specification is already secure

Security Status:
- CVE-2025-1194: Fixed in transformers >=4.50.0, current spec >=4.53.0 ✓
- Affects: SubWordJapaneseTokenizer in GPT-NeoX-Japanese model
- Impact: ReDoS via crafted input causing exponential regex backtracking

Note: Without a lockfile (pip-tools/uv/poetry), Dependabot cannot determine
the installed version and raises alerts based on the requirement spec alone.
2026-04-02 23:01:07 +02:00
TPTBusiness 31ad73b531 chore: Update torch to 2.8.0 (CVE-2025-3730 fix)
- Upgrade torch from >=2.6.0 to >=2.8.0
- Fixes CVE-2025-3730: DoS in torch.nn.functional.ctc_loss
- Vulnerability in LossCTC.cpp leads to denial of service
- Local attack with low complexity, requires low privileges
- Also fixes CVE-2025-32434 (torch.load RCE)

Fixes Dependabot Alert #34
2026-04-02 23:00:28 +02:00
TPTBusiness e393339cbe chore: Document transformers CVE-2025-3263 is already fixed
- Add comment explaining transformers >=4.53.0 is already safe (CVE fixed in >=4.51.0)
- Dependabot alert #35 is false positive due to missing lockfile
- No version change needed - current specification is already secure

Security Status:
- CVE-2025-3263: Fixed in transformers >=4.51.0, current spec >=4.53.0 ✓
- CVE-2024-11393: Fixed in current version ✓
- CVE-2025-3264/3933/2099/6051: Fixed in current version ✓

Note: Without a lockfile (pip-tools/uv/poetry), Dependabot cannot determine
the installed version and raises alerts based on the requirement spec alone.
2026-04-02 23:00:18 +02:00
TPTBusiness 212aad8130 chore: Update transformers to 4.53.0 (CVE-2025-6051 fix)
- Upgrade transformers from >=4.52.1 to >=4.53.0
- Fixes CVE-2025-6051: ReDoS in EnglishNormalizer.normalize_numbers()
- Crafted numeric strings can cause excessive CPU consumption
- Affects text-to-speech and number normalization tasks

Fixes Dependabot Alert #42
2026-04-02 22:59:56 +02:00
TPTBusiness 3dba0931b4 chore: Update transformers to fix CVE-2025-3933 (ReDoS)
- Update transformers from >=4.51.0 to >=4.52.1
- Fixes GHSA-37mw-44qp-f5jm
- ReDoS vulnerability in DonutProcessor.token2json() method
2026-04-02 22:59:38 +02:00
TPTBusiness 8c64df87df chore: Add CVE-2025-2099 to transformers security notes
- Document CVE-2025-2099 (ReDoS in preprocess_string function)
- Already fixed by transformers>=4.51.0 (patched in 4.50.0)
- Dependabot alert is false positive due to missing lockfile

Fixes Dependabot Alert #32
2026-04-02 22:59:18 +02:00
TPTBusiness 83e18e27f3 fix: Override webshop's Werkzeug dependency to fix CVE-2026-27199
- Add explicit Werkzeug>=3.1.6 to override webshop's transitive dep (2.2.3)
- Upgrade Flask to >=3.1.0 for Werkzeug 3.x compatibility
- Add installation note: install webshop FIRST, then upgrade Werkzeug/Flask

Security Fixes (Werkzeug 3.1.6):
- CVE-2026-27199: Windows device names in safe_join() (DoS via hanging reads)
- CVE-2025-66221: Windows device names in safe_join() (fixed in 3.1.4)
- CVE-2024-49766: safe_join UNC path bypass on Windows (fixed in 3.0.6)
- CVE-2024-34069: Werkzeug debugger RCE (fixed in 3.0.3+)

Technical Note:
- webshop 0.1.0 depends on Werkzeug==2.2.3 (vulnerable)
- Direct dependency Werkzeug>=3.1.6 overrides transitive dep at install time
- pip installs dependencies in order, last version wins

Fixes Dependabot Alert #7 (GHSA-29vq-49wr-vm6x)
2026-04-02 22:59:10 +02:00
TPTBusiness 12120f99d2 chore: Update transformers to fix CVE-2025-3264 (ReDoS)
- Update transformers from >=4.48.0 to >=4.51.0
- Fixes GHSA-jjph-296x-mrcr
- ReDoS vulnerability in get_imports() function
2026-04-02 22:58:53 +02:00
TPTBusiness ef874a943f chore: Update pydantic to 2.4.0 (CVE-2024-3772 fix)
- Bump minimum version from 2.0.0 to 2.4.0
- Fixes ReDoS vulnerability via crafted email strings
- Dependabot alert #24
2026-04-02 22:58:12 +02:00
TPTBusiness 7006c9469e chore: Add CVE-2023-46136 to Werkzeug security notes
- Document CVE-2023-46136 (DoS via multipart/form-data parser)
- Already fixed by Werkzeug>=3.1.6 upgrade
- Fixes Dependabot Alert #1
2026-04-02 22:57:09 +02:00
TPTBusiness fe8ee4e8dd chore: Fix Werkzeug CVEs with upgrade to 3.1.6
- Upgrade Werkzeug from 2.3.8 to 3.1.6 (fixes all Werkzeug CVEs)
- Upgrade Flask from 2.2.5 to 3.0.0+ (required for Werkzeug 3.x)
- Add CVE-2024-49766 (safe_join UNC path bypass) to security notes
- Update comments to reflect Flask 3.x compatibility

Fixed CVEs:
- CVE-2025-66221: Windows device names in safe_join()
- CVE-2024-49766: safe_join UNC path bypass on Windows
- CVE-2024-34069: Werkzeug debugger RCE
- CVE-2024-49767: Resource exhaustion via multipart/form-data

Fixes Dependabot Alerts #2, #3, #4
2026-04-02 22:56:15 +02:00
TPTBusiness 197b5ab51b chore: Update Werkzeug to fix CVE-2025-66221
- Update Werkzeug from ==2.3.8 to >=3.1.6
- Update Flask from ==2.2.5 to >=3.0.0
- Fixes GHSA-hgf8-39gv-g3f2 (Windows device names in safe_join)
- Also fixes CVE-2024-34069 and CVE-2024-49767
2026-04-02 22:55:56 +02:00
TPTBusiness bbb06b2115 chore: Add CVE-2024-49767 to Werkzeug security notes
- Update Werkzeug comment to include resource exhaustion vulnerability
- Version 2.3.8 is latest secure 2.x version (Flask 3.x incompatible with WebShop)
- Document mitigation: max_content_length limits, no debug mode in production

Fixes Dependabot Alert #4 (GHSA-q34m-jh98-gwm2)
2026-04-02 22:55:09 +02:00
TPTBusiness a935786e2b chore: Document vLLM CVE-2026-22807 is already fixed
- Add comment explaining vLLM >=0.18.0 is already safe (CVE fixed in >=0.14.0)
- Dependabot alert #44 is false positive due to missing lockfile
- Translate all comments to English (project language policy)
- No version change needed - current specification is already secure

Security Status:
- CVE-2026-22807: Fixed in vLLM >=0.14.0, current spec >=0.18.0 ✓
- CVE-2026-22778: Fixed in current version ✓
- CVE-2026-27893: Fixed in current version ✓

Note: Without a lockfile (pip-tools/uv/poetry), Dependabot cannot determine
the installed version and raises alerts based on the requirement spec alone.
2026-04-02 22:54:58 +02:00
TPTBusiness 5881a3f776 chore: Add CVE-2026-22807 to vllm security fix comment
- Update vllm comment to include auto_map RCE vulnerability
- Version >=0.18.0 fixes all three vllm CVEs:
  - CVE-2026-22778 (JPEG2000 heap overflow RCE)
  - CVE-2026-22807 (auto_map dynamic module RCE)
  - CVE-2026-27893 (trust_remote_code override)
2026-04-02 22:54:32 +02:00
TPTBusiness 71ddbe1a64 chore: Update vllm security fix comment (CVE-2026-22778) 2026-04-02 22:52:29 +02:00
TPTBusiness 56176a581e chore: Update torch to 2.6.0 (CVE-2025-32434, CVE-2024-31580 fix)
- Bump minimum version from 2.0.0 to 2.6.0
- Fixes CVE-2025-32434: RCE vulnerability in torch.load with weights_only=True
- Fixes CVE-2024-31580: Heap buffer overflow (DoS) in vararg_functions.cpp
- Dependabot alerts #40 and #26
2026-04-02 22:52:09 +02:00
TPTBusiness 19b9d23952 fix: Update Werkzeug to 2.3.8 (latest secure 2.x version)
- Upgrade Werkzeug from 2.2.3 to 2.3.8 in WebShop requirements
- Translate all comments to English (project language policy)
- Add security note for CVE-2024-34069 (debugger vulnerability)
- Document mitigation: debug mode disabled in production

Security Notes:
- CVE-2024-34069 affects Werkzeug debugger (dev mode only)
- Flask 3.x required for full fix, but incompatible with WebShop
- Mitigation: Benchmark runs locally, never with debug=True in production
- This is the latest secure version compatible with Flask 2.x

Fixes Dependabot Alert #2 (GHSA-2g68-c3qc-8985)
2026-04-02 22:51:30 +02:00
TPTBusiness e25da63862 chore: Update torch to 2.6.0 (CVE-2025-32434 fix)
- Bump minimum version from 2.0.0 to 2.6.0
- Fixes RCE vulnerability in torch.load with weights_only=True
- Dependabot alert #40
2026-04-02 22:51:13 +02:00
TPTBusiness 46720b30b6 chore: Update transformers to 4.48.0 (CVE-2024-11393 fix)
- Bump minimum version from 4.40.0 to 4.48.0
- Fixes Deserialization of Untrusted Data RCE vulnerability
- Dependabot alert #29
2026-04-02 22:50:10 +02:00
TPTBusiness 4cfec6c46b fix: Prevent path traversal in autorl_bench server.py
- Add explicit security comments for CodeQL
- Improve error messages for each validation step
- Reject null bytes, drive letters, and absolute paths
- Validate resolved path is within workspace_root
- Fixes GitHub Security Alert #6 (py/path-injection)

Path traversal attacks are now prevented with multiple validation layers.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-02 22:02:05 +02:00