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.