{ "canonical_id": "symfony--CVE-2021-41270", "system_id": "symfony", "display_name": "Symfony", "category": "frameworks", "advisory_mode": "core", "title": "CSV Injection in symfony/serializer", "summary": "Description\n-----------\n\nCSV Injection, also known as Formula Injection, occurs when websites embed untrusted input inside CSV files. When a spreadsheet program opens a CSV, any cell starting with `=` is interpreted by the software as a formula and could be abused by an attacker.\n\nIn Symfony 4.1, we've added the opt-in `csv_escape_formulas` option in `CsvEncoder`, to prefix all cells starting by `=`, `+`, `-` or `@` by a tab `\\t`. \n\nSince then, OWASP added 2 chars in that list: \n- Tab (0x09)\n- Carriage return (0x0D)\n\nThis makes our previous prefix char (Tab `\\t`) part of the vulnerable characters, and [OWASP suggests](https://owasp.org/www-community/attacks/CSV_Injection) using the single quote `'` for prefixing the value.\n\nResolution\n----------\n\nSymfony now follows the OWASP recommendations and use the single quote `'` to prefix formulas and adds the prefix to cells starting by `\\t`, `\\r` as well as `=`, `+`, `-` and `@`.\n\nThe patch for this issue is available [here](https://github.com/symfony/symfony/commit/3da6f2d45e7536ccb2a26f52fbaf340917e208a8) for branch 4.4.\n\nCredits\n-------\n\nWe would like to thank Jake Barwell for reporting the issue and J\u00e9r\u00e9my Deruss\u00e9 for fixing the issue.\n", "published_at": "2021-11-24T21:01:23Z", "updated_at": "2026-03-13T21:59:52.395727Z", "severity": "low", "cvss_score": 3.1, "exploit_status": "unknown", "source_confidence": "official", "official_source_url": "https://github.com/symfony/symfony/security/advisories/GHSA-2xhg-w2g5-w95x", "secondary_source_urls": [ "https://nvd.nist.gov/vuln/detail/CVE-2021-41270", "https://github.com/symfony/symfony/pull/44243", "https://github.com/symfony/symfony/commit/3da6f2d45e7536ccb2a26f52fbaf340917e208a8", "https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/serializer/CVE-2021-41270.yaml", "https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/symfony/CVE-2021-41270.yaml", "https://github.com/symfony/symfony", "https://github.com/symfony/symfony/releases/tag/v5.3.12", "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/3BPT4SF6SIXFMZARDWED5T32J7JEH3EP", "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/QSREFD2TJT5LWKM6S4MD3W26NQQ5WJUP", "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/3BPT4SF6SIXFMZARDWED5T32J7JEH3EP", "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/QSREFD2TJT5LWKM6S4MD3W26NQQ5WJUP", "https://symfony.com/cve-2021-41270" ], "aliases": [ "BIT-symfony-2021-41270", "CVE-2021-41270", "GHSA-2xhg-w2g5-w95x" ], "cve_ids": [ "CVE-2021-41270" ], "ghsa_ids": [ "GHSA-2xhg-w2g5-w95x" ], "osv_ids": [ "GHSA-2xhg-w2g5-w95x" ], "affected_versions": [ "v5.0.0", "v5.0.1", "v5.0.10", "v5.0.11", "v5.0.2", "v5.0.3", "v5.0.4", "v5.0.5", "v5.0.6", "v5.0.7", "v5.0.8", "v5.0.9", "v5.1.0", "v5.1.0-BETA1", "v5.1.0-RC1", "v5.1.0-RC2", "v5.1.1", "v5.1.10", "v5.1.11", "v5.1.2", "v4.1.0", "v4.1.1", "v4.1.10", "v4.1.11", "v4.1.12", "v4.1.2", "v4.1.3", "v4.1.4", "v4.1.5", "v4.1.6", "v4.1.7", "v4.1.8", "v4.1.9", "v4.2.0", "v4.2.0-BETA1", "v4.2.0-BETA2", "v4.2.0-RC1", "v4.2.1", "v4.2.10", "v4.2.11", "v4.1.13", "introduced=5.0.0, fixed<5.3.12", "introduced=4.1.0, fixed<4.4.35" ], "fixed_versions": [ "5.3.12", "4.4.35" ], "package_name": "symfony/symfony", "render_markdown": true, "case_path": "07-framework-security/frameworks/symfony/cases/symfony-cve-2021-41270.md", "secure_code_topics": [ "xss-output-encoding", "authz-server-side-recheck", "path-traversal-guard" ], "status": "generated", "triage_reasons": [], "verification_status": "triage-manual", "verification_mode": "synthetic", "last_verified_at": null, "last_run_id": null, "evidence_bundle": null, "historical_status": null, "latest_status": null, "browser_evidence": { "required": false, "present": false, "refs": [] }, "repro_profile_id": "xss-generic", "artifact_mode": "synthetic", "blocked_reason": null, "metadata": { "source_names": [ "OSV Symfony" ], "source_kinds": [ "osv-batch" ], "candidate_count": 1 } }