It's possible using sed, but not trivial to get correct for arbitrary markup. Consider that the "" sequence in
<![CDATA[ --> ]]> <![CDATA[ ... ]]>
should not be fixed, but the one in
<!-- <![CDATA[ --> <![CDATA[ ... ]]>
should be fixed.
To handle it in the general case, you have to write a SAX parser in sed and that still won't handle illegal codepoints introduced via external entity inclusion.
That said, well-formed but numerically invalid character references inside CDATA sections are probably rare, and CDATA section boundary tokens inside comments are probably rarer still.