You can make a dodecahedron as follows:
Start with an octahedron $\mathcal O$ with edges of length $1$. You can color its faces inblack and white in such a way that no two faces of the same color share an edge, and then you can orient each edge of $\mathcal O$ so that when you move along it, with your head pointing towards the outside of $\mathcal O$, you have white on your left. Now pick a number $\theta\in[0,1]$ and on each edge of the octahedron mark the point which is at distance $\theta$ from the starting vertex of that edge (according tothe orientations we fixed)
If $\theta\in(0,1)$, then this construction gives us 12 points, one one each edge. If you think about this a little bit you'll see that for some value of $\theta$ these twelve points are the vertices of a dodecahedron: this is a simple consequence of the intermediate value theorem from calculus. One can explicitely compute this, with some work, and it turns out that we need $\theta$ to be the inverse of the golden ratio.
The following Mathematica code gives an interative thingie to see this construction:
vertex = Flatten[ Map[NestList[RotateLeft, #, 2] & , {{1, 0, 0}, {-1, 0, 0}}, {1}], 1]; n = Length[vertex]; edges = Select[Subsets[vertex, {2}], EuclideanDistance[#[[1]], #[[2]]] == Sqrt[2] &]; faces = Select[Subsets[vertex, {3}], Complement[Subsets[#, {2}], edges] == {} &]; red = FindVertexCover[ Graph[Rule @@@ Select[Subsets[faces, {2}], Length[Intersection[#[[1]], #[[2]]]] == 2 &]]]; orientedRedFaces = Map[Function[f, Partition[ If[Dot[Cross[f[[2]] - f[[1]], f[[3]] - f[[2]]], Total[f]] < 0, f[[{1, 3, 2}]], f], 2, 1, 1] ], red]; orientedBlueFaces = Map[Function[f, Partition[ If[Dot[Cross[f[[2]] - f[[1]], f[[3]] - f[[2]]], Total[f]] < 0, f[[{1, 3, 2}]], f], 2, 1, 1] ], Complement[faces, red]]; orientedEdges = Flatten[orientedRedFaces, 1]; Manipulate[ Graphics3D[{ Line /@ orientedEdges, {PointSize[0.02], Point[t #[[1]] + (1 - t) #[[2]]] & /@ orientedEdges}, FaceForm[Red], Polygon /@ Map[t #[[1]] + (1 - t) #[[2]] &, orientedRedFaces, {2}], Polygon /@ Map[(1 - t) #[[1]] + t #[[2]] &, orientedBlueFaces, {2}] }, Boxed -> False], {{t, 1/GoldenRatio, "\[Theta]"}, 0, 1} ]
This produces images such as

but the interesting thing is really the interactivity which allows you to play with it and see how the picture changes when you change $\theta$.
Now of course this does not answer your question, because I constructed a dodecahedron from an octahedron, and you wanted an icosahedron from a cube! But one can dualize this constructing, taking advantage of the fact that the dual of a cube is an octahedron, and the dual of an icosahedron is a dodecahedron. I'll leave all that fun to you.