Finnish often gets used as an example of a language that does not contrast voiced and voiceless consonants. While this is not really correct for Standard Finnish (which at least prescribes all of the voiced stops /b d g/), it’s true for many dialects, especially in pre-modern times.  The same also holds for most reconstructions of Proto-Uralic and Proto-Finnic. A few times I’ve seen this even given as a typical feature of the Uralic languages. This much is not the case, though. The presence of voiced stops in the recorded Uralic languages varies, but generally tends towards inclusion.
- No voiced stops:
- Most spoken Finnish; Northern Karelian
- Most of Ob-Ugric
- Forest Nenets, Northern Selkup
- Allophonic voiced stops:
- Estonian (short stops optionally voiced medially)
- Ingrian (voiced before sonorants)
- older Mari (voiced after nasals)
- some varieties of Ob-Ugric, at least Southern Khanty per some descriptions (voiced medially)
- Phonemic voiced stops:
- most Samic languages
- most of Finnic: Standard Finnish, Livonian, Votic, Southern Karelian incl. Livvi, Ludian–Veps
- all of Mordvinic
- newer Mari
- all of Permic
- most of Samoyedic: Tundra Nenets, Enets, Nganasan, Southern Selkup, Kamassian, Mator
(The distribution of voiced sibilants such as /z/ is very similar, though they are additionally lacking in standard Finnish and in northern Samoyedic. They are however less important for the forthgoing points, so I will focus on the voiced stops.)
This might still be a higher proportion of languages without voiced stops than within most language families of the Old World, though. Within Indo-European I can only think of Tocharian; Icelandic and varieties of High German; Scottish Gaelic; and, per some views, much of Anatolian. Maybe one of the Eastern Iranian languages that are heavy on spirantization? Even outside IE, the only other national language examples I know of are Chinese (not even in its entirety; at least Wu and Min still preserve the Middle Chinese voiced stop series) and Mongolian. Continental Southeast Asia has plenty of languages that are short on voiced pulmonic stops proper, but these often “compensate” by having instead implosives or prenasalized voiced stops; e.g. Vietnamese with /ɓ ɗ/, Hmong with a full series from /ᵐb/ to /ᴺɢ/.
Reconstructions could be added to the picture as further data points of their own, e.g. Proto-Samic and Proto-Samoyedic are both reconstructed without any voiced stops. However, when we move from synchrony into history, it is probably more important to consider the origin of voiced stops. This shows variation as well, but some particular pathways crop up repeatedly:
- *-P- > -B- (general voicing of original singleton stops):
- Southern Sami
- Finnic: Livonian, Ludian–Veps
- Tundra Nenets, Kamassian, Mator
- *-P- > -P- ~ -B- (voicing of singleton stops through consonant gradation):
- Kola Sami
- probably Proto-Finnic
- ? Southern Selkup
- *-Đ- > *-B- (hardening of earlier voiced spirants):
- Standard Finnish (*ð > /d/ only)
- Votic (*ɣ > /g/ only)
- newer Mari (†ð, †ɣ > /d/, /g/)
- *-NP- > -B- (simplification of stop+nasal clusters):
- most of Samic (Southern through Skolt); usually as geminate -BB-
You might notice that all of these apply word-medially only. I have also left some more complicated cases off the list for now.
One wildcard approach is Nganasan, where the two most widely established phonemic voiced stops /b/, /ď/ come typically from *w, *j and are unrelated to the original stop consonants. [g] only occurs natively as the equivalent of /k/ under consonant gradation; [d] is even more limited, found as the weak grade of /t/ in the cluster [nd], while between vowels the result is [ð]. (Due to loanwords both could be probably now considered phonemic in modern Nganasan, though strangely enough these kind of inventories seem to then call the dental phoneme /ð/ per its intervocalic allophone and not, as could be expected, /d/.) Also some /b/, /ď/ come by gradation from PU *p, *ś. Their strong grades though are not the corresponding voiceless stops, but instead, a few sound changes later, /x/ and /s/. 
A similar setup *w *j > /b dž/ is found also in Kamassian and Mator, in these accompanied though by regular medial voicing. *j > /ď/ alone is more common yet: this is standard in Southern Karelian and Ludian, and found also in some varieties of Veps, Mari, Udmurt and Enets, at least. I even recall reading about a dialect of Hungarian that does this, but I don’t have any good overviews of Hungarian dialectology on hand to double-check with.
This is all also from the POV of synchronic voiced stops. Medial voicing, gradation-related or not, has likely happened at some point in by far most Uralic languages, but this often continued on with further lenition. E.g. in Permic, intervocalic *-p- *-t- *-k- are all continued as zero, most likely with intermediate > *[b] *[d] *[g] > *[β] *[ð] *[ɣ]. In at least one case, two separate rounds of medial voicing have been involved: thus in Southern Karelian, which has both consonant gradation and general medial voicing, so that original singleton stops yield the alternations b ~ v, d ~ ∅, g ~ ∅. This continues earlier stop/spirant gradation: *p ~ *v, *t ~ *ð, *k ~ *ɣ,  which in turn is probably from even earlier voiceless/voiced gradation: *p ~ *b, *t ~ *d, *k ~ *g.
Something similar may be actually the case in Permic. There’s reason to suspect that the full *-NP- to -B- shift was later than the lenition of medial single stops. Insted of filling in new voiced stops after the lenition of medial single stops to spirants, these clusters may have instead, in the first phase, filled in new voiceless stops already before the simplification of the original geminates. This is suggested by how a few late loanwords from Iranian still show *-NP- > -B- (/pad/ ‘crossroads’ ← Ir. *panta- ‘path’) but also seem to retain voiced stops as is (Udm. /vudor/ ~ Komi /vurd/ ‘otter’ ← Ir. *udra-); even Indo-Iranian voiceless stops can be continued as voiced (Udm. /kureg/ ~ Komi /kurɤg/ ‘hen’ ← Ir. or II *karka-; per *a > /u/ this must be an older loan than the previous two). So perhaps words of this group were all originally borrowed with simple voiceless stops (*pantɜ or *päntɜ > *patɜ, *vutrɜ, *karäkɜ > *kurekɜ), and they then went through a second round of medial lenition in late Proto-Permic, before the fall of final vowels (> *padɜ, *vudrɜ, *kuregɜ > *pad, *vudr, *kureg)? On the other hand, loaning from some Iranian variety with medial voicing is also conceivable, in the last case even an alternate analysis with *-eg as a suffix, and *rk > *r as in native vocabulary. (The epenthesis to *karäkɜ that would need to be assumed otherwise looks very sketchy, actually.)
I have even wondered if this could have been the same voicing process that affected Proto-Permic single voiceless stops after an unstressed syllable in mainline Komi, but not in Udmurt or Komi-Permyak (e.g. in the adjectival ending Udm. /-et/ ~ K /-ɤd/ ~ KPerm. /-ɤt/). But the fate of the original geminates suggests this is unlikely: since they yield modern Permic simple voiceless stops, same as everywhere from Veps on east, their shortening would have to be later than the voicing of any transient secondarily introduced medial voiceless stops. And it seems rather unparsimonious to assume geminates were still maintained as late as Proto-Komi.
Hungarian also has both *-P- > *-Đ- (*-p- *-t- > -v- -z-; *-k- > †-ɣ- > -v- ~ ∅) and *-NP- > -B-, but here we likely only need a single common round of medial voicing, followed by a chainshift of sorts of *-B- *-NB- to *-Đ- *-B-. Unlike Permic, new /-NP-/ or /-NB-/ clusters are established early-ish; though in loanwords from Iranian the only example seems to be kincs ‘treasure’ < pre-Hu *kenčɜ ← *gandz-.  Several others have correspondences elsewhere in Uralic, but I suspect these cases to be mostly loans / Wanderwörter rather than proper native inheritance. (They probably deserve to be more carefully looked at at some point, though.)
This big picture, I think, also raises some questions about the supposed retention of voiceless stops in a few languages.
I am not talking about any kind of a spin on the alternate reconstruction by Steinitz — who outright posited an original stop versus spirant contrast *-t- : *-ð-, instead of a gemination contrast *-tt- : *-t- (and, among the dentals, shunting *d₁ = traditional *ð then off as an absurd “retroflex spirant *δ̣”). This remains conclusively debunked by loanwords from Indo-European, whose voiceless stops turn up with traditional *-t- etc. (Indo-Iranian *ćata ‘100’ → *śëta > Hungarian száz, Erzya сядо /śado/, etc.), instead of Steinitz’ *-t- = traditional *-tt-. A weaker version of this could be perhaps still entertained: medial *-tt- : *-d- etc., but I don’t really see any particular benefit to it. In my opinion the situation found in Samic, Finnish–Karelian, Nganasan and perhaps Selkup can be still considered archaic, with all stop consonants voiceless by default, voiced (> lenited to non-stops in Finnish, Karelian and the immediately adjacent Sami varieties) at most under consonant gradation.
But the other four cases of Uralic languages without any voiced stops seem more dubious. To reiterate: (most of?) Mansi, (most of?) Khanty, Forest Nenets, Northern Selkup. These are all bundled together in western Siberia; the two latter have close relatives that do show medial voicing (i.e. Tundra Nenets and Southern Selkup); and even the former two are usually considered somewhat closely affiliated with Hungarian. Unlike Finnic and Samic, they also all show general shortening of geminates. In most Uralic languages this has been associated with earlier medial voicing, i.e. *-tt- : *-t- > *-tt- : *-d- > *-t- : *-d-, with the length contrast transphonologized as a voicing contrast, as is more common worldwide.
The languages have also gone through some non-general medial lenition: *-k- > *-ɣ- in Ob-Ugric (including even clusters such as *sk), and in Samoyedic *-k- is lost at least in *ə-stems (though not in all cases in *A-stems; established examples of retention include *pirkä < *pid₁kä ‘high’, *kåjkə < *kod₂ka ‘spirit’). In Far Eastern Khanty also *-p- > /-w-/. There is also some limited direct evidence of stop devoicing: like Nganasan, Kamassian and Mator, Selkup also fortites *w and *j — but all the way to voiceless *k, *ḱ.
So I suspect that voicelessness of all stop consonants, as could be proposed for Proto-Uralic, is not actually directly continued in these languages. This looks more like an areal feature, either an innovation wave that crossed a few language boundaries on its way, or subtrate influence. Direct influence from Forest Nenets or some extinct related variety seems possible for Northern Selkup, while in the case of Ob-Ugric, this is maybe more likely to to have been taken up from the original pre-Uralic substrate languages of the region.
This would also mean that degemination and medial voicing could be reconstructed as common Ugric features, if desired; with voicing developing further into spirantization in Hungarian, but eventually mostly reverted in Ob-Ugric. If so, this continues undermining further the notion of Ob-Ugric as a genetic subgroup within Uralic. Previous surveys by Honti and Viitso have not found any common innovations in the languages’ consonant systems other than the nearly trivial degemination, and several trivial shared retentions such as the maintenance of *w- as still /w-/. The evidence of Hungarian-Mansi isoglosses (e.g. *wi > *wü- > *ü-) and even Hungarian-Khanty ones (e.g. *d₂ > *j, further shared by Samoyedic) should also be weighed here: perhaps it is rather some of these that are old common inheritance after all, as has been suggested by various people at various times.
 Note that /f/ versus /v/, a contrast fairly widely established in western dialects, does not count as a voicing distinction: the latter is the approximant/semivowel [ʋ]. This is even treated as further equal to /u/ in some generative models of Finnish phonology. I write this as /v/ in broad transcription both for simplicity & following the traditional Uralistic transcription (which itself follows Finnish standard orthography), much like I also generally use /a ä/ instead of the IPA-compliant [ɑ æ].
 This also has, I think, implications for the reconstruction of the history of consonant gradation, since *z > /ď/ does not seem plausible. Either we have to date the emergence of consonant gradation between voiceless and voiced grades already into pre-Proto-Samoyedic (= effectively Proto-Uralic), with further ramifications; or, if we want to consider this pattern an innovation specific for Nganasan that never occurred in its close relatives (note in particular that while medial stops are generally lenited in Enets and Tundra Nenets, the same does not apply to /s/), then it is instead the loss of palatalization in *ś that must be also dated as post-Proto-Samoyedic. We would not need to assume an outright palatalized stop or affricate, though: a conceivable route to the modern situation would be *[ś] > [ś] ~ [ź] > [s] ~ [j] > [s] ~ [ď]. Note also that while palatalized *kʲ > *ć in early common Samoyedic merges with /s/ in northern Smy, in southern Smy these have distinct reflexes /š/ and /s/, suggesting *ś > *s rather soon after PSmy, at the latest.
 Traditionally the labial spirant stage is given as [β], but to my knowledge, there is no evidence whatsoever anywhere in Finnic for a distinction between this and regular /v/ < *w; only for retained /b/ in Livonian and Ludian–Veps. Setälä conceived of the latter as a re-fortition from [β], but to me a marginal archaism that never went through a spirant stage seems more likely. It’s conceivable that the shift from *w to labiodental /v/ was not yet completed by the time of [b] > [β], and so this may have been immediately a merger, with [β] > [v ~ ʋ] only following later. The fact that several Finnish dialects are reported to have [w] for /v/ next to rounded vowels (e.g. in SE Tavastia [wuos] for vuosi ‘year’, [sywä] for syvä ‘deep’) may even support reconstructing [w] still for Proto-Finnic in some positions at least.
 Judging by the voiceless k and cs, this looks like one of those early loans where Proto-Iranian *c *dz (later > /s z/) were substituted by *č in Uralic, instead of anything directly related to the unexpected appearence of /dž/ in Persian گنج ganj.