I would have said He “earned” The Medal Of Honor.
The official title is simply the “Medal of Honor,” and it is only awarded to members of the U.S. armed forces, not civilians.
While the award is presented by the President on behalf of Congress, it has never been properly titled the “Congressional Medal of Honor,” but the error keeps propagating, for some reason.
With respect to the OP, I agree that “receives” or “is awarded” is better than “won.” It’s not a competition; it’s a honor bestowed upon those who distinguish themselves “conspicuously by gallantry and intrepidity at the risk of his or her life above and beyond the call of duty while engaged in an action against an enemy of the United States.”