[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"repo-stars":3,"vuln-CVE-2026-41197":6},{"stargazers_count":4,"fetched_at":5},5,"2026-04-23T10:19:07.713Z",{"id":7,"descriptions":8,"cisa":9,"weaknesses":10,"exploits":28,"aliases":29,"duplicate_of":9,"upstream":31,"downstream":32,"duplicates":33,"related":34,"reserved_at":9,"published_at":35,"modified_at":35,"state":36,"summary":37,"references_raw":44,"kevs":63,"epss":9,"epss_history":64,"metrics":65,"affected":74},"CVE-2026-41197","Noir is a Domain Specific Language for SNARK proving systems that is designed to use any ACIR compatible proving system, and Brillig is the bytecode ACIR uses for non-determinism. Noir programs can invoke external functions through foreign calls. When compiling to Brillig bytecode, the SSA instructions are processed block-by-block in `BrilligBlock::compile_block()`. When the compiler encounters an `Instruction::Call` with a `Value::ForeignFunction` target, it invokes `codegen_call()` in `brillig_call/code_gen_call.rs`, which dispatches to `convert_ssa_foreign_call()`. Before emitting the foreign call opcode, the compiler must pre-allocate memory for any array results the call will return. This happens through `allocate_external_call_results()`, which iterates over the result types. For `Type::Array` results, it delegates to `allocate_foreign_call_result_array()` to recursively allocate memory on the heap for nested arrays. The `BrilligArray` struct is the internal representation of a Noir array in Brillig IR. Its `size` field represents the semi-flattened size, the total number of memory slots the array occupies, accounting for the fact that composite types like tuples consume multiple slots per element. This size is computed by `compute_array_length()` in `brillig_block_variables.rs`. For the outer array, `allocate_external_call_results()` correctly uses `define_variable()`, which internally calls `allocate_value_with_type()`. This function applies the formula above, producing the correct semi-flattened size. However, for nested arrays, `allocate_foreign_call_result_array()` contains a bug. The pattern `Type::Array(_, nested_size)` discards the inner types with `_` and uses only `nested_size`, the semantic length of the nested array (the number of logical elements), not the semi-flattened size. For simple element types this works correctly, but for composite element types it under-allocates. Foreign calls returning nested arrays of tuples or other composite types corrupt the Brillig VM heap. Version 1.0.0-beta.19 fixes this issue.",null,[11],{"_key":12,"id":12,"name":13,"description":14,"type":15,"status":16,"abstraction":17,"likelihood_of_exploit":18,"capec":19},"CWE-131","Incorrect Calculation of Buffer Size","The product does not correctly calculate the size to be used when allocating a buffer, which could lead to a buffer overflow.","weakness","Draft","Base","High",[20,24],{"id":21,"name":22,"techniques":23},"CAPEC-100","Overflow Buffers",[],{"id":25,"name":26,"techniques":27},"CAPEC-47","Buffer Overflow via Parameter Expansion",[],[],[30],"GHSA-jj7c-x25r-r8r3",[],[],[],[],"2026-04-23T00:35:37.842Z","Received",{"cisa_kev":38,"cisa_ransomware":38,"cisa_vendor":9,"epss_severity":9,"epss_score":9,"severity":39,"severity_score":40,"severity_version":41,"severity_source":42,"severity_vector":43,"severity_status":36},false,"critical",9.3,"v4.0","cve.org","CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",[45,53,58],{"url":46,"sources":47,"tags":50},"https://github.com/noir-lang/noir/security/advisories/GHSA-jj7c-x25r-r8r3",[48,42,49],"osv_crates.io","nvd",[51,52],"WEB","X Refsource CONFIRM",{"url":54,"sources":55,"tags":56},"https://github.com/noir-lang/noir",[48],[57],"PACKAGE",{"url":59,"sources":60,"tags":61},"https://github.com/noir-lang/noir/releases/tag/v1.0.0-beta.19",[48,42,49],[51,62],"X Refsource MISC",[],[],[66,68,71],{"source":48,"cvss_v2_0":9,"cvss_v3_0":9,"cvss_v3_1":9,"cvss_v4_0":67},{"baseScore":40,"baseSeverity":9,"vectorString":43,"impactScore":9,"exploitabilityScore":9},{"source":42,"cvss_v2_0":9,"cvss_v3_0":9,"cvss_v3_1":9,"cvss_v4_0":69},{"baseScore":40,"baseSeverity":70,"vectorString":43,"impactScore":9,"exploitabilityScore":9},"CRITICAL",{"source":49,"cvss_v2_0":9,"cvss_v3_0":9,"cvss_v3_1":9,"cvss_v4_0":72},{"baseScore":40,"baseSeverity":70,"vectorString":73,"impactScore":9,"exploitabilityScore":9},"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/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",[75,86],{"ecosystem":76,"name":77,"vendor":76,"product":77,"cpe_part":9,"purl_type":78,"purl_namespace":9,"purl_name":77,"source":9,"versions":79},"Crates.Io","brillig","cargo",[80],{"version":81,"is_range":82,"range_type":83,"version_start":9,"version_start_type":9,"version_end":84,"version_end_type":85,"fixed_in":9},"lt1_0_0_beta_19",true,"semver","1.0.0-beta.19","excluding",{"ecosystem":9,"name":87,"vendor":88,"product":87,"cpe_part":89,"purl_type":9,"purl_namespace":9,"purl_name":9,"source":9,"versions":90},"noir","noir-lang","a",[91],{"version":92,"is_range":82,"range_type":42,"version_start":9,"version_start_type":9,"version_end":84,"version_end_type":85,"fixed_in":9},"\u003C 1.0.0-beta.19"]