I strongly recommend trying to contribute to a project that you personally use. Once you've been using it for awhile, you'll be better equipped to make changes to it + you'll maybe find bugs that you can fix. While you're doing this, mark yourself as a watcher of the project on Github, that way you can see bug reports come in and maybe fix them.
You can try to contribute to just any project someone here suggests, but I find it hard to get motivated + be skilled enough in that language/project to just start contributing. Can you talk about your current skills and what kind of languages/libraries you're using now, or are interested in learning?
I strongly agree with MaxGabriel. I find it difficult to make meaningful contributions to projects which I don't use or have some familiarity with. I am significantly more motivated to make contributions to projects which I have invested my time in.
My advice is to start small. Look into making documentation updates and fixing bugs you find in projects you currently use. Expand your open source toolset as you build more and repeat the process.
I see a lot of good general advice, but not too many specific examples. Here's a very specific one...
If you want to do C and get an introduction to a bit of arm assembly, you may want to contribute a new model build to CHDK, the Canon Hack Developer Kit. There are always new models out that need support, like the Canon PowerShot Elph(US)/Ixus(EU) 160.
You can try to contribute to just any project someone here suggests, but I find it hard to get motivated + be skilled enough in that language/project to just start contributing. Can you talk about your current skills and what kind of languages/libraries you're using now, or are interested in learning?