Preheat oven to 375 degrees F. Spread the hazelnuts out on a single layer on a rimmed baking sheet and roast until dark brown and fragrant, 12 to 15 minutes, rotating the baking sheet halfway through baking. Keep a close eye on them, as they can go from perfect roasted to burnt in a short amount of time. Transfer the hazelnuts to a medium-sized bowl.
Once the hazelnuts are cool enough to handle, place a second bowl upside-down on top of the bowl with the hazelnuts. Shake vigorously for about 30 seconds to remove the skins of the hazelnuts. It may take a few times to get all of the skins off; each time, remove the hazelnuts that have lost their skin to the bowl of a food processor, then continue shaking. Process the hazelnuts in a food processor until their oil is released and they form a smooth, loose paste, 2 to 5 minutes, scraping down the bowl often.
Add the powdered sugar, cocoa powder, hazelnut oil, vanilla extract and salt and process until fully incorporated, scraping the bowl as needed, about 2 minutes. The mixture will loosen and become glossy. Transfer the spread to a jar with a tight-fitting lid or an airtight container. You can store it in the refrigerator or at room temperature for up to 1 month.
If you want to do away with having to remove the hazelnut skins, you could purchase blanched hazelnuts, which I might try next time.
I was not able to find hazelnut oil at any local grocery stores (including Whole Foods), so I ended up ordering it from Nuts.com. You could substitute walnut oil or vegetable oil, but the hazelnut oil really helps give the spread a silky smooth texture.