CAS simply prevents untrusted code from doing something you don't want it to do to a resource you might want to protect.
I think the classic example of where it's required is an untrusted program attempting to access resources on your local PC. In such a case, you can use CAS to grant permissions to this program to do what it needs to do.
I've personally used CAS to grant permissions to a set of (.NET 1.1 and 2.0) applications running from our intranet. These programs might need to perform IO on the workstations running them. Without CAS, I'd get security exceptions when attempting these operations.
You might want to check out this article:
Understanding .NET Code Access Security
The article does a better job of explaining this than I did. It also walks you through setting it up.