S/MIME, SSL, and any other technology based on public key encryption is presently as secure as the list of certificates you trust. It always has been and it always will be until computing power reaches the point of being able to brute force the algorithms behind it.
If they are doing things right, the CA never sees your private key. You should be generating a keypair on your machine, then send the public part to the CA. The CA sends back a signed copy of the public part (the certificate). The private key should never leave your machine.
Compromising a CA allows the attacker to sign an arbitrary public key. Since the certificate includes things such as a human-readable name, this would allow someone to pretend to be you by creating a certificate with your name on it. They still would not have your private key, however, so this does not allow them to decrypt anything sent to you.