Below are a few examples of witness malleability, along with reasons why I believe they are no longer valid:
- For every DER signature with (r,s), there exists 2 valid 's' values -> BIP146 requires low 's' only
Can add OP_NOP -> "scriptsig-not-pushonly" error
Can add OP_1 at start of scriptSig -> "Stack size must be exactly one after execution" error
Can add, say, OP_PUSHDATA1 OP_0 -> "Data push larger than necessary" error
Can add OP_1 OP_DROP at start of scriptSig -> "scriptsig-not-pushonly" error
In summary, it appears the Bitcoin team has done a pretty good job of plugging the holes in non-segwit witness data malleability, so I'm not clear why one of the major benefits of segwit to this day is listed as preventing malleability (I get that Segwit is a more absolute solution to this problem, given the witness data isn't part of txid and hence txid is immutable).
The only reasons I can think of why non-segwit malleability would remain an issue is if some of the witness malleability attack vectors listed above are still valid if a transaction is submitted directly to miner (even if rejected by other nodes), or if a non-negligible portion of nodes still hadn't updated these software changes from 2016 etc.